Hàm Java chuyển dữ liệu nhận từ Acces sang Excel

0

Trả lời :
Trong lập trình bằng Java, bạn có thể truy xuất dễ dàng các table trong các cơ sở dữ liệu bằng cách dùng các đối tượng ODBC (nằm trong package java.sql). Một file Access chứa nhiều bảng dữ liệu, một file *.xls cũng có thể chứa nhiều worksheet, mỗi worksheet cũng chính là 1 bảng dữ liệu. Tóm lại đoạn code truy xuất database dựa trên các đối tượng ODBC rất tổng quát và có thể truy xuất các bảng dữ liệu, cho dù chúng được quản lý bởi hệ quản trị cơ sở dữ liệu nào. Sau đây là qui trình điển hình để viết 1 ứng dụng Java bằng môi trường NetBeans (môi trường lập trình Java mã nguồn mở của hãng SUN) có chức năng chuyển dữ liệu từ 1 worksheet Excel sang 1 bảng trong Access:
 1. Chạy NetBeans, tạo 1 project ứng dụng loại Java - Java Desktop Application.
 2. Thiết kế form ứng dụng chứa các đối tượng giao diện cần dùng như sau:
 Đặt tên cho 4 textbox lần lượt là txtSrcFile, txtSheet, txtDestFile, txtTable. Đặt tên cho button là btnCopy.
 3. Tạo hàm xử lý click chuột trên button btnCopy rồi viết code cho hàm này như sau:
 //thêm lệnh import sau vào đầu file
 import java.sql.*;
 
 //hàm xử lý click chuột trên button Copy
 private void btnCopyActionPerformed(java.awt.event.ActionEvent evt) {
 //định nghĩa các biến cần dùng
 String srcFile = txtSrcFile.getText();
 String srcSheet = txtSheet.getText();
 String dstFile = txtDestFile.getText();
 String dstTable = txtTable.getText();
 Connection srcCon = null, dstCon =null;
 Statement srcStmt = null, dstStmt = null;
 ResultSet srcRs = null, dstRs = null;
 String strSQL = null;
 int i, nocs=0;
 //xây dựng chuỗi ConnectionString truy xuất file Excel
 String conStr = "jdbc:odbc:Driver={Microsoft Excel Driver (*.xls)} ;DBQ=" + srcFile + ";READONLY=true}";
 try {
 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
 //tạo connection đến file Excel
 srcCon = DriverManager.getConnection(conStr, "", "");
 srcStmt = srcCon.createStatement();
 //tạo ResultSet chứa các hàng của Sheet cần chuyển
 srcRs = srcStmt.executeQuery("Select * from [" + srcSheet + "$]");
 //xây dựng lệnh SQL tạo Table đích
 strSQL = "CREATE TABLE " + dstTable + "(";
 //duyệt tìm từng field của table nguồn
 int fStart = 1;
 ResultSetMetaData rsmd = srcRs.getMetaData();
 nocs = rsmd.getColumnCount();
 for (i=1; i <=nocs; i++)="">
 if (fStart != 0) {
 strSQL = strSQL + rsmd.getColumnName(i) + " " + rsmd.getColumnTypeName(i);
 fStart = 0;
 } else strSQL = strSQL + ", " + rsmd.getColumnName(i) + " " + rsmd.getColumnTypeName(i);
 }
 strSQL = strSQL + ")";
 //Tạo connection tới database đích
 conStr = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" + dstFile + ";READONLY=false}";
 dstCon = DriverManager.getConnection(conStr, "", "");
 dstStmt = dstCon.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
 ResultSet.CONCUR_UPDATABLE);
 } catch (Exception e) {}
 //xóa table nếu đã có rồi
 try {
 dstRs = dstStmt.executeQuery("drop table " + dstTable);
 } catch (Exception e) {}
 try {
 //Tạo table trên database đích
 dstStmt.executeQuery(strSQL);
 } catch (Exception e) {}
 try {
 //Tạo resultset chứa các data của table đích (hiện là rỗng)
 dstRs = dstStmt.executeQuery("select * from " + dstTable);
 //duyệt copy từng record từ nguồn sang đích
 Object obj;
 while (srcRs.next()) {
 //di chuyển tới record cần thêm
 dstRs.moveToInsertRow();
 //duyệt thêm từng field
 for (i = 1; i <= nocs;="" i++)="">
 obj = srcRs.getObject(i);
 dstRs.updateObject(i,obj);
 }
 //tạo thêm record trống mới
 dstRs.insertRow();
 }
 //đóng các đối tượng đang dùng lại
 srcRs.close(); dstRs.close();
 srcCon.close();
 dstCon.close();
 } catch (Exception ex) {
 System.out.println(ex.toString());
 }
 }
 4. Chọn menu Run.Run Project để chạy ứng dụng vừa viết, nhập thử tên file Excel, tên Sheet cần chuyển, nhập tên file Access và tên table cần chứa kết quả rồi nhấn button "Bat dau chuyen". Sau đó kiểm tra xem trong file Access có table mới tạo ra không, nội dung của table có giống với sheet Excel gốc không.

 Lưu ý rằng với code của ứng dụng trên, file Access chứa kết quả phải có sẵn (nhưng chưa có bản dữ liệu trong worksheet Excel).
 
0--1

Liên hệ xóa tin: [email protected]