JDBC 驱动程序 MS Access 连接

Posted

技术标签:

【中文标题】JDBC 驱动程序 MS Access 连接【英文标题】:JDBC driver MS Access connection 【发布时间】: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 但仍然有相同的错误。 【参考方案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。

基本上在那个时候:

    您可以通过 JDBC-ODBC 桥从 32 位 java 连接到 Ms-Access 您无法通过 JDBC-ODBC 从 64 位 java 连接到 32 位 Odbc 驱动程序。有一条消息告诉您只能从 32 位程序连接 虽然 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 位系统上,您应该:

    以管理员身份运行访问databaseengine_64.exe 运行 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 查看图片后点击返回浏览器返回此处...

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

希望它能解决你的问题。

谢谢。

【讨论】:

以上是关于JDBC 驱动程序 MS Access 连接的主要内容,如果未能解决你的问题,请参考以下文章

java中MS Access的驱动程序

Eclipse 数据源资源管理器和 MS-Access

无法使用 DBeaver 和默认的 UCanAccess-5.0.0 驱动程序连接到 MS Access mdb 文件

使用 PDO 的 MS Access PHP 连接“找不到驱动程序”错误

JDBC连接数据库驱动及URL对应表

Java JDBC连接数据库 Access连接数据库