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 连接的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 DBeaver 和默认的 UCanAccess-5.0.0 驱动程序连接到 MS Access mdb 文件