Java JDBC驱动程序MS访问连接

Java JDBC驱动程序MS访问连接,java,odbc,Java,Odbc,我想用Java GUI程序连接我的MS access文件,但我的连接有问题 我有Windows 7 64b和ms office 2007。 当我在控制面板中打开ODBC驱动程序管理器时,我还没有找到任何Microsoft Access的驱动程序(可能是当我启动ODBC时开始运行64位ODBC,现在我想是运行32位ODBC)。 我读了这篇文章,然后写下: “Windows 7 64位计算机的jdbc odbc连接..”。。 1.右键单击数据源(ODBC)…转到属性更改以下内容 目标[%System

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

我有Windows 7 64b和ms office 2007。 当我在控制面板中打开ODBC驱动程序管理器时,我还没有找到任何Microsoft Access的驱动程序(可能是当我启动ODBC时开始运行64位ODBC,现在我想是运行32位ODBC)。 我读了这篇文章,然后写下: “Windows 7 64位计算机的jdbc odbc连接..”。。 1.右键单击数据源(ODBC)…转到属性更改以下内容

目标[%SystemRoot%\SysWOW64\odbcad32.exe] 起始位置:[%SystemRoot%\System32]

按enter键并继续作为管理员源: " )现在,当我在控制台面板中启动ODBC时,我可以看到驱动程序

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

错误

java.sql.SQLException:[Microsoft][ODBC驱动程序管理器]未找到数据源名称,也未指定默认驱动程序


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

C:/Windows/SysWOW64/odbcad32.exe

然后我注意到您使用的是直接路径,而不是创建新的
系统DSN
,您的直接路径是正确的,直到访问文件的路径您必须给出如下完整路径:

jdbc:odbc:Driver=Microsoft Access驱动程序(*.mdb,*.accdb);DBQ=path/to/Invertory.mdb“

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

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();
    }
}

不久前我回答了一个类似的问题

基本上当时,

  • 您可以通过JDBC-ODBC桥从32位java连接到Ms Access
  • 您无法从64位java通过JDBC-Odbc连接到32位Odbc驱动程序。有消息告诉您只能从32位程序连接
  • 虽然Microsoft提供了64位Ms Access驱动程序,但它不能与Java的64位JDBC-ODBC驱动程序配合使用

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

    您的代码中缺少了一些东西:

    db ="JDBC:ODBC:Driver=Microsoft Access Driver (*.mdb, *.accdb); DBQ="+path;
    
    您需要在
    驱动程序=
    )=;
    之间添加
    {}
    。 像下面这样

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

    问题是,您应该在Java 32位上运行,并尝试安装最新的JDK,它将正常工作

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

    使用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");
    
    Class.forName(“net.ucanaccess.jdbc.UcanaccessDriver”);
    Connection conn=DriverManager.getConnection(“jdbc:ucanaccess://”,用户,密码);
    例如:
    Connection conn=DriverManager.getConnection(“jdbc:ucanaccess://c:/pippo.mdb”);
    

    因此,对于您的示例,它将是
    Connection conn=DriverManager.getConnection(“jdbc:ucanaccess://“+path”)
    在64位系统上,您应该:

  • 以管理员accessdatabaseengine_64.exe身份运行
  • 运行java-7-64位-jre

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

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

    1.在列表中的项目上单击鼠标右键>单击“属性”

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

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

    4.FOLLOW向导,尽管它显示JAVA标准版,请单击NEXT

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

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

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

    JDK7应该显示在库包中

    查看图像后,单击浏览器中的“上一步”返回此处

    从现在起,一切都必须顺利进行

    希望它能解决你的问题


    谢谢。

    您安装Access时是否验证了ODBC组件已安装?我不记得了,但现在我重新安装了ms office 2007。这是直接路径。不需要创建新的系统DSN,您可能需要检查
    .mdb
    文件的路径。我使用了此视频:在视频中,代码正在工作。但是对我来说不是。我重新安装了所有允许ms office的软件,但仍然有相同的错误。String DATABASE=“jdbc:odbc:Driver=Microsoft Access Driver(.mdb,*.accdb);DBQ=C:/Users/Kex/Documents/NetBeansProjects/database\u form/database\u form/Invertory.mdb;String database=“jdbc:odbc:Driver=Microsoft Access Driver(.mdb,*.accdb);DBQ=C:\\Users\\Kex\\Documents\\NetBeansProjects\\database\u form\\database\u form\\Invertory.mdb”;我尝试了两种方法,但都不起作用。启动后仍然出错。我的位置是:C:/Windows/SysWOW64/odbcad32.exe我尝试将此代码放在“String database=”jdbc:odbc:Driver=Microsoft Access Driver”之后和之前(.mdb,*.accdb);DBQ=C:/Users/Kex/Documents/NetBeansProjects/database\u form/database\u form‌​/Invertory.mdb;String DATABASE=“jdbc:odbc:Driver=Microsoft Access Driver(.mdb,*.accdb);”现在我有了另外一个东西:“java.lang.NullPointerException”表示我连接到了Access文件?不,在这个函数中没有:请描述一下你也在做什么。
    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");
    
    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);