2012-04-23 97 views
4

到目前爲止,當我不得不連接到32位Access數據庫時,我只是使用32位JVM執行應用程序。但是,我正在開發一個需要64位JVM的應用程序,但我仍然需要連接到32位Access數據庫。當我嘗試連接,我得到這個異常:如何從64位JVM連接到32位Access數據庫?

java.sql.SQLException: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified 
at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source) 
at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source) 
at sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(Unknown Source) 
at sun.jdbc.odbc.JdbcOdbcConnection.initialize(Unknown Source) 
at sun.jdbc.odbc.JdbcOdbcDriver.connect(Unknown Source) 
at java.sql.DriverManager.getConnection(Unknown Source) 
at java.sql.DriverManager.getConnection(Unknown Source) 

這是我的代碼:

String s = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" + path; 
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
conn = DriverManager.getConnection(s, user, password); 
+0

退房這個職位,這似乎是一個類似的問題http://stackoverflow.com/questions/3454701/32-bit-text-drivers-microsoft-access-microsoft-excel-and-text-files-from-一個。具體而言,請查看有關從Microsoft安裝64位MS Access Redistributable Pack的最後一個答案。 – mazaneicha 2012-04-24 00:32:25

+0

有時它也是用戶帳戶中看到http://stackoverflow.com/a/36793611/808723 – GameScripting 2016-04-22 12:16:42

回答

9

從我的經驗

對於用戶(?或系統)ODBC DSN的有獨立32位和64位定義。我想你可能有32位的定義,但是Java ODBC-Bridge正在尋找64位的定義。您不能直接連接到 64位程序的32位訪問ODBC驅動程序(如果您嘗試,您會收到錯誤消息)。

雖然微軟分發與Windows 32個ODBC Microsoft Access中驅動程序(32 & 64位),它不 分發64個與Windows 64位驅動程序MSACCESS有一個一個64 bit Access ODBC Driver 可從Microsoft。有一些問題,下載並安裝64位驅動程序MSACCESS

  • ,當我與Java 6(64位)進行了測試中的java /驅動器只工作間歇性; 我還沒有用Java 7測試過。 對於java 6,我認爲如果字符串字段在SQL select語句結尾處,您可能會確定。 我發現一些SQL語句的工作有些沒有。
  • 與32位驅動程序,你確切知道驅動程序所在的位置,與 64位驅動程序,你不知道它將被安裝在哪裏。這使得自動化安裝 腳本很難寫。
  • 您還需要創建單獨的64位ODBC定義。

    ============================================== =

在一個不同的音符,它可能會運行一些數據庫代理/池包在32比特的java 運行(並且通過TCP/IP連接?)。我從來沒有嘗試過。

Java的64 - >> DB代理運行32位Java DB - >>微軟的Access

數據庫代理列表:http://www.manageability.org/blog/stuff/jdbc-proxy-drivers

像SSL-SQL代理服務器可能工作

祝你好運,希望有人能爲你提供一個解決方案


由於原來的答案,有2 JDBC驅動程序的

開源:http://ucanaccess.sourceforge.net/site.html

商業:http://www.csv-jdbc.com/stels_mdb_jdbc.htm

我還沒有嘗試過任何


編輯:2014年5月8日

看起來是更加商業化的驅動程序Easysoft DriverHXTT Driver

Article可能是有用的


編輯2016年1月6日

作爲戈德Thompson說; ODBC-Bridge已從Java 8中移除。好消息是UCanAccess正在積極開發之中,並且他們似乎正在穩步前進。

+0

我確認布魯斯表示,與Java中使用時,對於64位Microsoft Access ODBC驅動程序的問題是什麼。這似乎是非常麻煩的,出於某種原因,互聯網上關於它的信息很少。列順序似乎很重要,我也有問題。我切換回32位ODBC驅動程序(這也意味着切換回32位JVM),並且一切正常。 – kaliatech 2012-07-24 03:08:15

0

的問題是,你應該對Java運行32位嘗試安裝最新的JDK,它會工作

我使用的是JDK版本運行 「的jdk-7u67-Windows的i586.exe」

+0

這並不回答OP在應用程序中明確聲明需要64位JVM的問題。 – abiessu 2016-04-21 15:49:19

2

現在,JDBC-ODBC橋已經從Java 8所有的周邊訪問ODBC將越來越多地成爲過去的事情,「真正的」 JDBC驅動程序將需要這些問題中刪除。

,如前面提到的答案,UCanAccess是一個免費開源的選擇。它不使用ODBC可言,所以不論何種平臺(Windows,Linux的...)或建築作品純Java實現(32位或64位)。

有關使用UCanAccess的更多信息,請參閱相關的問題here