8

I want connect my MS access file with Java GUI program,but I have problem with connection....

I have Windows 7 64b, and ms office 2007. When I opened the ODBC driver manager in the control panel I havent found any driver for Microsoft Access (maybe when I started the ODBC is started running the 64bit ODBC, now I think is running the 32bit ODBC. I read this and I make it : "jdbc-odbc connection for window 7 64 bit machine.. 1 . Right click Data source (ODBC)..go to properties change the folloing thing

target [ %SystemRoot%\SysWOW64\odbcad32.exe ] start in : [ %SystemRoot%\System32 ]

press enter and continue as admin source: source link " ) Now when I start in conctrol pannel the ODBC I can see the driver screenshoot

My program code(I tried two ways but I have same error):

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

error

java.sql.SQLException: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified

4

9 回答 9

15

使用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)

于 2014-12-04T09:44:59.150 回答
2

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

C:/Windows/SysWOW64/odbcad32.exe

然后我注意到您使用的是直接路径而不是创建新System DSN路径,您的直接路径是正确的,直到访问文件的路径必须提供完整路径,如下所示:

jdbc:odbc:Driver= Microsoft Access 驱动程序 (*.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();
    }
}
于 2013-05-18T17:00:41.380 回答
2

不久前我回答了一个类似的问题,请在此处输入链接描述

基本上在那个时候:

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

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

于 2013-07-10T05:48:55.733 回答
0

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

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

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

db ="JDBC:ODBC:Driver={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ="+path;
于 2013-12-15T09:36:55.243 回答
0
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);
于 2015-07-30T04:59:03.517 回答
-1

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

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

于 2014-09-02T09:05:20.327 回答
-1

在 64 位系统上,您应该:

  1. 以管理员身份运行访问databaseengine_64.exe
  2. 运行 java - 7-64 位 - jre。
于 2017-01-25T12:45:52.337 回答
-1

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 查看图片后点击 Back in Browser 返回此处...

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

希望它能解决你的问题。

谢谢。

于 2017-12-01T20:35:57.433 回答
-1

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

于 2017-05-07T15:22:27.257 回答