创建jdbc odbc连接而不在MS ACCESS中创建DSN

时间:2013-01-04 12:56:26

标签: java ms-access jdbc jdbc-odbc

我正在尝试建立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();
     }

3 个答案:

答案 0 :(得分:1)

它应该是这样的:

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

答案 1 :(得分:0)

JDBC连接字符串以jdbc:开头,如:

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

答案 2 :(得分: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 Ultimate 32bit计算机上使用不同连接字符串运行的测试下面显示:

        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 Database”是ODBC注册表中的有效标题,是我计算机上的用户DSN。