2013-10-12 67 views
2

嗨我有以下代碼連接到Windows 7操作系統上的MS Access數據庫。我已將數據源捷徑更改爲指向64位odbc,然後是32位。但仍然得到錯誤的如何從64位Java連接到Access .mdb數據庫?

java.sql.SQLException: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified 
    at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6956) 
    at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7113) 
    at sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(JdbcOdbc.java:3072) 
    at sun.jdbc.odbc.JdbcOdbcConnection.initialize(JdbcOdbcConnection.java:323) 
    at sun.jdbc.odbc.JdbcOdbcDriver.connect(JdbcOdbcDriver.java:174) 
    at java.sql.DriverManager.getConnection(DriverManager.java:579) 
    at java.sql.DriverManager.getConnection(DriverManager.java:221) 
    at TestDBConnection.main(TestDBConnection.java:21) 

而且我的代碼是:

import java.sql.Connection; 
import java.sql.DriverManager; 

public class TestDBConnection { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     try 
     { 
      System.out.println("filename"); 
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
      String database = 
         "jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb)};DBQ=C:\\Test\\Tests.mdb"; 
      Connection conn = DriverManager.getConnection(database, "", ""); 
     } catch(Exception ex) { 
      ex.printStackTrace(); 
     } 
    } 

} 

如何過我有SQL工作臺工具,通過它我可以連接到它,但不是通過Java代碼。

由於我在谷歌上搜索過去3小時,我一直在努力解決這個問題,所以請大力幫助。

+1

您正在使用'.mdb'文件的直接路徑,不需要創建任何'DSN'。嘗試添加'* .accdb'也是:*'JDBC:ODBC:Driver = {Microsoft Access Driver(* .mdb,* .accdb)}; DBQ = DBQ = C:\\ Test \\ Tests.mdb' * – Azad

+0

@ Azad,沒有運氣:( – GuruKulki

回答

8

如果您的Java應用程序在64位Java虛擬機(JVM)中運行,那麼DRIVER={Microsoft Access Driver (*.mdb)}將不起作用,因爲沒有64位版本的Jet數據庫引擎。你可以...

  • 下載,然後從here安裝Microsoft Access數據庫引擎的64位版本,然後在你的代碼中使用DRIVER={Microsoft Access Driver (*.mdb, *.accdb)}

......或者......

  • 運行您的Java應用程序在32位JVM,並繼續使用現有的DRIVER=字符串。如果您選擇此選項,相關答案here可能會有幫助。

......或者......

  • 使用UCanAccess JDBC驅動程序Access數據庫。它是一個免費的開放源碼純Java實現,因此它可以在Windows和非Windows的32位和64位系統上運行。它也適用於Java 8(它已經刪除了JDBC-ODBC Bridge)。有關詳細信息,請參閱:

                Manipulating an Access database from Java without ODBC

+0

如果有人有這個錯誤使用64位JVM嘗試添加「* .accdb」到您的「DRIVER = ... 「字符串爲我工作 – andymal

+0

恢復到32位讓我很難過,但讓我的腳本正確導出讓我快樂起來(我過着簡單的生活) – sMaN

1
+0

由於安裝了32位的辦公軟件,我被限制在這條路上。 – sMaN

+0

您的意思是,安裝Office 32bit時,您不能在同一個系統上安裝64位odbc驅動程序? –

+0

我認爲這是根據我收到的錯誤消息。 Windows推薦我卸載我的32位程序。 – sMaN

0

1安裝訪問可用64個ODBC驅動程序),你會必須配置系統dsn(驅動程序Microsoft Access驅動程序(.mdb, .accdb)) 2)鏈接上述配置中的.mdb數據庫 並寫下面的代碼。

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
String database = "jdbc:odbc:systemdsnname"; 
Connection conn = DriverManager.getConnection(database, "", "");