我也有這個問題,並嘗試了很多這裏和各種論壇上的建議。最後,我從一個地方發現了一個導致成功連接的片段,並解釋了爲什麼很多這些帖子不起作用。請參閱http://www.coderanch.com/t/295299/JDBC/databases/jdbc-odbc-DSN-connection-MS
問題是在odbc末尾冒號後面必須有一個分號,如在jdbc中:odbc:; Driver =。在閱讀JdbcOdbc橋接器上的Oracle文檔後,說明語法爲jdbc:odbc:dsn;屬性.......由於我們不提供DSN,所以我們需要結束;在添加屬性之前。
我顯示我用不同的連接字符串跑了Windows 7旗艦版32位機器上測試以下:
driver= (Driver)Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
//jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ= does lookup to ODBC.ini to find matching driver
try {
connstr= "jdbc:odbc:;Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=" + fileURI; //64 bit ?? (*.mdb,*.accdb)
conn= DriverManager.getConnection(connstr, "", "");
stmt= conn.createStatement();
}
catch (Exception e){}
try {
connstr= "jdbc:odbc:;Driver={Microsoft Access Driver (*.mdb)};DBQ=" + fileURI; //64 bit ?? (*.mdb,*.accdb)
conn1= DriverManager.getConnection(connstr, "", "");
stmt1= conn1.createStatement();
dbmeta1=conn1.getMetaData();
}
catch (Exception e){}
try {
connstr= "jdbc:odbc:MS Access Database;DBQ=" + fileURI; //64 bit ?? (*.mdb,*.accdb)
conn2= DriverManager.getConnection(connstr, "", "");
stmt2= conn2.createStatement();
dbmeta2=conn2.getMetaData();
}
catch (Exception e){}
try {
connstr= "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" + fileURI; //64 bit ?? (*.mdb,*.accdb)
conn3= DriverManager.getConnection(connstr, "", "");
stmt3= conn3.createStatement();
dbmeta3=conn3.getMetaData();
}
catch (Exception e){}
stmt1和stmt3是空的,因爲連接是空。 stmt和stmt2工作。 stmt2使用我在IBM Tivoli的文檔中找到的連接字符串。它的工作原理是因爲「MS Access數據庫」是ODBC註冊表中作爲我的計算機上的用戶DSN的有效標題。
[已經回答了這裏,這可能會幫助你] [1] [1]:使用相同的命令,但給人http://stackoverflow.com/a/5016979/1655086 –