2013-01-04 137 views
1

我正在嘗試使java和ms訪問數據庫之間的連接。我想在不創建DSN的情況下建立連接。我使用下面的代碼,但它拋出異常「數據源名稱未發現異常」創建jdbc odbc連接而不創建MS Access中的DSN

 try 
    { 
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 

    Connection con=DriverManager.getConnection("Jdbc:Odbc:Driver={Microsoft Access 
    Driver(*.mdb)}; dbq=d:/newfolder/db11.mdb"); 
    Statement st=con.createStatement(); 
    } 
    catch(Exception ex) 
    { 
    ex.printStackTrace(); 
    } 
+1

[已經回答了這裏,這可能會幫助你] [1] [1]:使用相同的命令,但給人http://stackoverflow.com/a/5016979/1655086 –

回答

1

它應該是這樣的:

Connection con = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=/db.accdb"); 
+0

尊敬的阿爾文使用相同的命令,但它給予作爲數據源名稱的異常沒有發現異常。 –

+0

數據庫文件是否位於項目路徑中? – AsirC

+0

我可以分配它,但現在它位於其他地方 –

0

JDBC連接字符串開始jdbc:像:

jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=d:\\newfolder\\db11.mdb 
+0

異常數據源名稱找不到異常 –

+0

@Adeshsingh:你有db11在指定的位置,並檢查擴展名是否是mdb –

+0

你的數據庫位於同一位置,錯誤與DSN相關,而不是數據庫位置請幫助我卡住嚴重這裏。 –

0

我也有這個問題,並嘗試了很多這裏和各種論壇上的建議。最後,我從一個地方發現了一個導致成功連接的片段,並解釋了爲什麼很多這些帖子不起作用。請參閱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

請注意,升級到Java 8時,這將停止工作,因爲Sun/Oracle JDK捆綁的JDBC -ODBC橋已被刪除。 – TallTed