簡體   English   中英

創建jdbc odbc連接而不在MS ACCESS中創建DSN

[英]creating jdbc odbc connection without creating the DSN in MS ACCESS

我正在嘗試在java和ms訪問數據庫之間建立連接。 我想建立連接而不創建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();
     }

應該是這樣的:

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

JDBC連接字符串以jdbc:開頭:

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

我也遇到了這個問題,並在這里和各種論壇上嘗試了許多建議。 最后,我從一個地方發現了一個片段,該片段導致成功連接,並且還解釋了為什么其中許多帖子不起作用。 參見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 Ultimate 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數據庫”作為我的計算機上的用戶DSN在ODBC注冊表中是有效的標題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM