java web操作Access資料庫
Microsoft Office Access是由微軟釋出的關係資料庫管理系統。它結合了 MicrosoftJet Database Engine 和 圖形使用者介面兩項特點,是 Microsoft Office 的系統程式之一。
JDK1.8增加了很多新特性,但不再包含access橋接驅動,因此在連線Access資料庫時有所變化[和JDK1.6相比]. 所以需要我們自己 建立連線方式
1、UCanAccess是一個純Java JDBC驅動程式,它允許我們在不使用ODBC的情況下讀取和寫入Access資料庫。它使用另外兩個軟體包Jackcess和HSQLDB來執行這些任務。以下是如何設定它的簡要概述。
選項1:使用Maven
如果您的專案使用Maven,則可以通過以下座標簡單包含UCanAccess:
groupId: net.sf.ucanaccess
artifactId: ucanaccess
<dependency> <groupId>net.sf.ucanaccess</groupId> <artifactId>ucanaccess</artifactId> <version>4.0.4</version> </dependency>
選項2:手動將JAR新增到您的專案中
如上所述,UCanAccess需要Jackcess和HSQLDB。
UCanAccess(ucanaccess-xxxjar)
HSQLDB(hsqldb.jar,版本2.2.5或更新版本)
Jackcess(jackcess-2.xxjar)
commons-lang(commons-lang-2.6.jar或更新的2.x版本)
commons-logging( commons-logging-1.1.1.jar或更新的1.x版本)
幸運的是,UCanAccess在其分發檔案中包含了所有必需的JAR檔案。當你解壓縮它時,你會看到類似的東西
ucanaccess-4.0.1.jar /lib/ commons-lang-2.6.jar commons-logging-1.1.1.jar hsqldb.jar jackcess-2.1.6.jar
您只需將所有五(5)個 JAR新增到您的專案中即可。
注意:不要不加
loader/ucanload.jar
,如果要新增其他五(5)JAR檔案到您的構建路徑。該UcanloadDriver
課程僅在特殊情況下使用,需要不同的設定。請參閱相關的答案在這裡瞭解詳情。
Eclipse:在Package Explorer中右鍵單擊專案並選擇Build Path > Configure Build Path...
。單擊“新增外部JAR ...”按鈕以新增五(5)個JAR中的每一個。當你完成你的Java Build Path應該看起來像這樣
NetBeans:展開專案的樹檢視,右鍵單擊“Libraries”資料夾並選擇“Add JAR / Folder ...”,然後瀏覽至JAR檔案。
新增所有五(5)個JAR檔案後,“Libraries”資料夾應該如下所示:
IntelliJ IDEA的:選擇File > Project Structure...
主選單。在“庫”窗格中單擊“新增”(+
)按鈕並新增五(5)個JAR檔案。一旦完成,該專案應該看起來像這樣:
而已!
現在使用這樣的程式碼在.accdb和.mdb檔案中“U可以訪問”資料
// assumes...
// import java.sql.*;
Connection conn=DriverManager.getConnection(
"jdbc:ucanaccess://C:/__tmp/test/zzz.accdb");
Statement s = conn.createStatement();
ResultSet rs = s.executeQuery("SELECT [LastName] FROM [Clients]");
while (rs.next()) {
System.out.println(rs.getString(1));
}
2、詳細的解決方案- 1. 在ClassPath下存一個空的blank.mdb. (也就是在你的專案中包含一個空白的.mdb檔案)
- 2. 將專案中的blank.mdb另存到新的路徑. (可能是使用者選擇要匯出mdb檔案的儲存路徑)
程式碼
public class AccessUtil { private Connection connection; private Statement statement; // 需要儲存到的新的mdb檔案路徑和名 private String savedMdbFilePathAndName = defaultSavedMdbFilePath + defaultSavedMdbFileName; // 新mdb檔案路徑 public static final String defaultSavedMdbFilePath = "C://"; // 新mdb檔名 public static final String defaultSavedMdbFileName = "data.mdb"; // 標準的單件模式 private static AccessUtil instance = new AccessUtil(); private AccessUtil() { } public static AccessUtil getInstance() { return instance; } /** * Description: 設定待儲存的新的mdb檔案路徑和名 */ public void setSavedFilePathAndName(String newFilePathAndName) { this.savedMdbFilePathAndName = newFilePathAndName; } /** * Description: 刪除已經存在的mdb檔案 */ public void deleteOldMdbFile() throws Exception { File oldTargetFile = new File(savedMdbFilePathAndName); if (oldTargetFile.exists()) { oldTargetFile.delete(); } } /** * Description: 將空白mdb檔案拷貝到特定目錄 */ public void copyBlankMdbFile() throws Exception { InputStream is = this.getClass().getClassLoader().getResourceAsStream("static/ERPDATA.mdb"); OutputStream out = new FileOutputStream(savedMdbFilePathAndName); byte[] buffer = new byte[1024]; int numRead; while ((numRead = is.read(buffer)) != -1) { out.write(buffer, 0, numRead); } is.close(); out.close(); } /** * Description: 開啟對mdb檔案的jdbc-odbc連線 */ public void connetAccessDB() throws Exception { /*Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" + savedMdbFilePathAndName.trim() + ";DriverID=22;READONLY=true}"; connection = DriverManager.getConnection(database, "", "");*/ connection=DriverManager.getConnection( "jdbc:ucanaccess://D:/data.mdb"); statement = connection.createStatement(); /*ResultSet rs = statement.executeQuery("SELECT [DATA1] FROM [TABLE]"); while (rs.next()) { System.out.println(rs.getString(1)); }*/ } /** * Description: 執行特定sql語句 */ public void executeSql(String sql) throws Exception { statement.execute(sql); } /** * Description: 關閉連線 */ public void closeConnection() throws Exception { statement.close(); connection.close(); } }
測試類
public class Test { public static void main(String[] args) { AccessUtil accessUtil = AccessUtil.getInstance(); accessUtil.setSavedFilePathAndName("D://data.mdb"); try { accessUtil.copyBlankMdbFile(); } catch (Exception e) { e.printStackTrace(); } try { accessUtil.connetAccessDB(); } catch (Exception e) { e.printStackTrace(); } try { accessUtil.executeSql("INSERT INTO [TABLE] ([DATA1],[DATA2],[DATA3]) VALUES('1','2','3')"); } catch (Exception e) { e.printStackTrace(); } try { accessUtil.closeConnection(); } catch (Exception e) { e.printStackTrace(); } } }
如果你是Maven專案 記得新增上面的依賴
如果不是的話,記得手動匯入jar包