【问题标题】:JDBC driver MS Access connectionJDBC 驱动程序 MS Access 连接
【发布时间】:2013-05-18 16:05:43
【问题描述】:

我想用 Java GUI 程序连接我的 MS 访问文件,但是连接有问题....

我有 Windows 7 64b 和 ms office 2007。 当我在控制面板中打开 ODBC 驱动程序管理器时,我没有找到任何 Microsoft Access 驱动程序(也许当我启动 ODBC 时开始运行 64 位 ODBC,现在我认为正在运行 32 位 ODBC。 我读了这个,我做到了: “window 7 64位机器的jdbc-odbc连接.. 1.右键单击数据源(ODBC)..转到属性更改以下内容

目标 [%SystemRoot%\SysWOW64\odbcad32.exe] 开始于:[%SystemRoot%\System32]

按 Enter 并以管理员身份继续:source link " ) 现在,当我在控制面板中启动 ODBC 时,我可以看到驱动程序 screenshoot

我的程序代码(我尝试了两种方法但我有同样的错误):

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

 //    String DatabaseFile = "D:java/Invertory.mdb";       
//            String DATABASE =
//                    "jdbc:odbc:Driver="
//                    + "{Microsoft Access Driver (*.mdb, *.accdb)};"
//                    + "DBQ=" + DatabaseFile;`enter code here`
 String DATABASE ="jdbc:odbc:Driver= Microsoft Access Driver (*.mdb, *.accdb);DBQ=Invertory.mdb";
           CONEX = DriverManager.getConnection(DATABASE);

        } catch (Exception X) {
          X.printStackTrace();
            //JOptionPane.showMessageDialog(null,e);
        }
    }

错误

java.sql.SQLException: [Microsoft][ODBC Driver Manager] 未找到数据源名称且未指定默认驱动程序

【问题讨论】:

  • 您是否在安装 Access 时验证了 ODBC 组件已安装?
  • 我不记得了,但现在我重新安装了 ms office 2007。
  • 这是直接路径,不需要创建新的System DSN,您可能需要检查.mdb文件的路径。
  • 我在视频中使用了这个视频:youtube.com/watch?v=Of4LRHOZoII,代码正在运行。但对我来说不是。我重新安装了所有,但它允许 ms office 但仍然有相同的错误。

标签: java odbc


【解决方案1】:

使用UCanAccess JDBC 驱动:

Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
Connection conn=DriverManager.getConnection("jdbc:ucanaccess://<mdb or accdb file path>",user, password); 
for example: 
Connection conn=DriverManager.getConnection("jdbc:ucanaccess://c:/pippo.mdb");

因此,对于您的示例,它将是 Connection conn=DriverManager.getConnection("jdbc:ucanaccess://"+path)

【讨论】:

    【解决方案2】:

    如果您使用的是 Windows 64 位,您可能需要转到此路径

    C:/Windows/SysWOW64/odbcad32.exe

    然后我注意到您使用的是直接路径而不是创建新的System DSN,您的直接路径是正确的,直到 access 文件的路径您必须像这样提供完整路径:

    jdbc:odbc:Driver= Microsoft Access Driver (*.mdb, *.accdb);DBQ=path/to/Invertory.mdb"

    要获取路径,您可能需要使用java.io.File,该方法有一个方法返回文件的绝对路径,请参见示例:

    import java.sql.*;
    public class TestConnection {
        Connection con ;
        Statement st ;
        ResultSet rs ;
        String db;
        public TestConnection (){
            try{
                String path = new java.io.File("Invertory.mdb").getAbsolutePath();
            db ="JDBC:ODBC:Driver=Microsoft Access Driver (*.mdb, *.accdb); DBQ="+path;
                doConnection();
            } catch(NullPointerException ex){
                    ex.printStackTrace();
                }
    
        }
    
        public void doConnection(){
            try{
                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                con = DriverManager.getConnection(db);
                st = con.createStatement();
                rs = st.executeQuery("select * from Invertory");
                while(rs.next()){
                    System.out.println(rs.getObject(1));
                }
            }catch(SQLException | ClassNotFoundException ex){
                System.out.println(ex.toString());
    
            }
    
        }
        public static void main(String...argS){
            new TestConnection();
        }
    }
    

    【讨论】:

    • String DATABASE ="jdbc:odbc:Driver= Microsoft Access 驱动程序 (.mdb, *.accdb);DBQ=C:/Users/Kex/Documents/NetBeansProjects/database_form/database_form/库存.mdb"; String DATABASE ="jdbc:odbc:Driver= Microsoft Access Driver (.mdb, *.accdb);DBQ=C:\\Users\\Kex\\Documents\\NetBeansProjects\\database_form\\database_form\\库存.mdb";我尝试了两种方法但不起作用。启动后仍然错误。我在:C:/Windows/SysWOW64/odbcad32.exe
    • 我尝试将此代码放在“String DATABASE ="jdbc:odbc:Driver= Microsoft Access Driver (.mdb, *.accdb);DBQ=C:/Users/Kex/Documents /NetBeansProjects/database_form/database_form‌​/Invertory.mdb"; String DATABASE ="jdbc:odbc:Driver= Microsoft Access Driver (.mdb, *.accdb);" 现在我有了别的东西:"java.lang.NullPointerException"这意味着我连接到访问文件?
    • 不,在这个函数中没有这里是:dropbox.com/sh/wfym48e5mkso83p/TzmBVCeUhZ
    【解决方案3】:

    不久前我回答了一个类似的问题enter link description here。

    基本上在那个时候:

    1. 您可以通过 JDBC-ODBC 桥从 32 位 java 连接到 Ms-Access
    2. 您无法通过 JDBC-ODBC 从 64 位 java 连接到 32 位 Odbc 驱动程序。有一条消息告诉您只能从 32 位程序连接
    3. 虽然 Microsoft 确实提供了 64 位 Ms-Access 驱动程序,但它不适用于 Java 的 64 位 JDBC-ODBC 驱动程序。

    从那时起,似乎有一个新的开源 Ms-Access JDBC 驱动程序Ms-Access JDBC driver。我不知道它有多好。

    【讨论】:

      【解决方案4】:

      你只是在这里的代码中遗漏了一些东西:

      db ="JDBC:ODBC:Driver=Microsoft Access Driver (*.mdb, *.accdb); DBQ="+path;
      

      您需要在 Driver= 和 )=; 之间添加 {} 。 像下面这样

      db ="JDBC:ODBC:Driver={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ="+path;
      

      【讨论】:

        【解决方案5】:
        final String fileName = "c:/myDataBase.mdb"
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ="+fileName;
        Connection con = DriverManager.getConnection(url,username,password);
        

        【讨论】:

        • 请描述一下你在做什么。
        【解决方案6】:

        问题是你应该在 Java 32 位上运行尝试安装最新的 JDK,它会工作

        我使用JDK版本运行它“jdk-7u67-windows-i586.exe”

        【讨论】:

          【解决方案7】:

          在 64 位系统上,您应该:

          1. 以管理员身份运行访问databaseengine_64.exe
          2. 运行 java - 7-64 位 - jre。

          【讨论】:

            【解决方案8】:

            如果您在 NETBEANS 中工作,则在解压缩 ucanacess.zip 文件后,使用项目的属性窗口在类路径中添加所有 jar 文件,然后单击编译选项卡并添加 jar 文件,然后编译和测试应用程序。

            【讨论】:

              【解决方案9】:

              JDBC-ODBC MS-ACCESS 连接在 JDK8 中停止工作。我通过在同一台 PC 上安装 JDK7 和 JDK8 解决了这个问题,一旦安装了 JDK7,我将其分配为我的项目中使用的 JDK 版本,如下在 Netbeans 中:

              1.右键单击列表中的项目>单击属性

              2.点击左侧导航树上的库

              3.点击按钮管理平台 > 点击按钮添加平台...

              4.FOLLOW WIZARD,尽管它显示 JAVA 标准版点击下一步

              5.导航到 C:\Program Files (x86)\Java 并选择 JDK7 的文件夹 > 单击下一步

              6.字段自动填充正确的信息...>然后单击完成

              7. 从列表中选择 JDK 平台 > 单击关闭 > 确定

              8.JDK7 应该显示在库包中。

              JDK7 in Libraries Package 查看图片后点击返回浏览器返回此处...

              从这里开始,一切都必须顺利进行。

              希望它能解决你的问题。

              谢谢。

              【讨论】:

                猜你喜欢
                • 2013-11-11
                • 2019-05-08
                • 1970-01-01
                • 2012-11-15
                • 2011-01-14
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多