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).