Chi tiết của & NBSP; Cập nhật lần cuối vào ngày 06 tháng 10 năm 2019 & NBSP; | & nbsp; & nbsp; in & nbsp; E-mail Last Updated on 06 October 2019 | Print Email
Nhập dữ liệu từ Excel vào cơ sở dữ liệu là một nhiệm vụ phổ biến của chương trình phần mềm. Vì vậy, trong bài đăng này, tôi sẽ chia sẻ với bạn một chương trình Java mẫu đọc dữ liệu từ tệp Excel và chèn dữ liệu đó vào cơ sở dữ liệu MySQL.
Giả sử rằng chúng ta có một tệp Excel lưu trữ thông tin về các sinh viên đăng ký vào các khóa học như thế này:
Như bạn có thể thấy, tệp Excel này chỉ có một tờ và thông tin sinh viên được lưu trữ trong 3 cột: Tên sinh viên [văn bản], đăng ký [thời gian ngày] và tiến trình [số]. Vì vậy, hãy để tạo ra một bảng tương ứng trong cơ sở dữ liệu với cấu trúc sau:
Bạn có thể chạy tập lệnh MySQL sau để tạo bảng này:
CREATE TABLE `students` [ `id` int[11] NOT NULL AUTO_INCREMENT, `name` varchar[128] NOT NULL, `enrolled` timestamp NOT NULL, `progress` int[11] NOT NULL, PRIMARY KEY [`id`] ];
Lưu ý rằng loại dữ liệu của cột đã đăng ký & NBSP; là dấu thời gian để nó có thể giữ cả giá trị ngày và thời gian.enrolled column is timestamp so it can hold both date and time values.
Để đọc tệp Excel từ Java, chúng ta có thể sử dụng thư viện Apache POI. Giả sử rằng dự án của bạn sử dụng maven, vì vậy hãy thêm phụ thuộc sau vào tệp pom.xml:pom.xml file:
org.apache.poi poi-ooxml 4.1.0
Và để chèn dữ liệu vào cơ sở dữ liệu MySQL từ Java, chúng tôi cần sử dụng một phụ thuộc cho trình điều khiển JDBC MySQL:
mysql mysql-connector-java 5.1.46 runtime
Và dưới đây là mã đầy đủ của chương trình mẫu đọc dữ liệu từ tệp Excel và chèn dữ liệu đó vào cơ sở dữ liệu MySQL:
package net.codejava; import java.io.*; import java.sql.*; import java.util.*; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.*; /** * Sample Java program that imports data from an Excel file to MySQL database. * * @author Nam Ha Minh - //www.codejava.net * */ public class Excel2DatabaseTest { public static void main[String[] args] { String jdbcURL = "jdbc:mysql://localhost:3306/sales"; String username = "user"; String password = "password"; String excelFilePath = "Students.xlsx"; int batchSize = 20; Connection connection = null; try { long start = System.currentTimeMillis[]; FileInputStream inputStream = new FileInputStream[excelFilePath]; Workbook workbook = new XSSFWorkbook[inputStream]; Sheet firstSheet = workbook.getSheetAt[0]; Iterator rowIterator = firstSheet.iterator[]; connection = DriverManager.getConnection[jdbcURL, username, password]; connection.setAutoCommit[false]; String sql = "INSERT INTO students [name, enrolled, progress] VALUES [?, ?, ?]"; PreparedStatement statement = connection.prepareStatement[sql]; int count = 0; rowIterator.next[]; // skip the header row while [rowIterator.hasNext[]] { Row nextRow = rowIterator.next[]; Iterator cellIterator = nextRow.cellIterator[]; while [cellIterator.hasNext[]] { Cell nextCell = cellIterator.next[]; int columnIndex = nextCell.getColumnIndex[]; switch [columnIndex] { case 0: String name = nextCell.getStringCellValue[]; statement.setString[1, name]; break; case 1: Date enrollDate = nextCell.getDateCellValue[]; statement.setTimestamp[2, new Timestamp[enrollDate.getTime[]]]; case 2: int progress = [int] nextCell.getNumericCellValue[]; statement.setInt[3, progress]; } } statement.addBatch[]; if [count % batchSize == 0] { statement.executeBatch[]; } } workbook.close[]; // execute the remaining queries statement.executeBatch[]; connection.commit[]; connection.close[]; long end = System.currentTimeMillis[]; System.out.printf["Import done in %d ms\n", [end - start]]; } catch [IOException ex1] { System.out.println["Error reading file"]; ex1.printStackTrace[]; } catch [SQLException ex2] { System.out.println["Database error"]; ex2.printStackTrace[]; } } }
Như bạn có thể thấy, chúng tôi sử dụng tính năng cập nhật hàng loạt JDBC để chèn hiệu quả một số lượng lớn các hàng vào cơ sở dữ liệu, với kích thước hàng loạt là 20 - có nghĩa là nó sẽ nhóm tối đa 20 câu lệnh SQL trong mỗi lô được gửi đến máy chủ để xử lý.
Chúng tôi cũng sử dụng giao dịch JDBC để đảm bảo rằng tất cả các hàng được chèn hoặc không có. Cuối cùng, chúng tôi đo thời gian cần thiết để hoàn thành việc đọc và chèn dữ liệu.
Chạy chương trình này và bạn sẽ thấy đầu ra bằng cách nào đó như thế này:
Import done in 3462 ms
Để xác minh, hãy chạy câu lệnh SQL Chọn trong MySQL Workbench và bạn sẽ thấy:
Đó là cách viết mã Java nhập dữ liệu từ tệp Excel và chèn vào cơ sở dữ liệu. Để bạn tham khảo, tôi đã đính kèm dự án mẫu trong phần đính kèm bên dưới.
Hướng dẫn liên quan:
- Cách đọc tệp Excel trong Java
- Cách thực hiện cập nhật hàng loạt/chèn với JDBC
Hướng dẫn mã hóa Java khác:
- Ví dụ về mã Java để chèn dữ liệu từ CSV vào cơ sở dữ liệu
- Cách hiển thị hình ảnh từ cơ sở dữ liệu trong trang JSP với java servlet
- Cách thực hiện Ghi nhớ mật khẩu [nhớ tôi] cho ứng dụng Web Java
- Cách viết mã đăng nhập và đăng xuất với Java Servlet, JSP và MySQL
- Cách viết mã Hit Counter cho ứng dụng web Java
- 10 sai lầm phổ biến mà mỗi lập trình viên Java mới bắt đầu mắc phải
- 10 thực tiễn tốt nhất của Java, mỗi lập trình viên Java nên biết
- Làm thế nào để trở thành một lập trình viên giỏi? 13 nhiệm vụ bạn nên thực hành ngay bây giờ
- Cách tính các giá trị băm MD5 và SHA trong Java
- Ví dụ mã hóa và giải mã tệp Java