JDBC驱动程序MS Access连接
我想用Java GUI程序连接我的MS访问文件,但我有连接问题….
我有Windows 7 64b和ms office 2007.当我在控制面板中打开ODBC驱动程序管理器时,我没有找到任何Microsoft Access驱动程序(也许当我启动ODBC时开始运行64位ODBC,现在我认为正在运行32位ODBC。我读了这个,我做到了:“jdbc-odbc连接窗口7 64位机器.. 1.右键单击数据源(ODBC)..转到属性更改下面的事情
目标[%SystemRoot%\ SysWOW64 \ odbcad32.exe]开始于:[%SystemRoot%\ System32]
按回车键继续作为管理员源: 源链接 “)现在,当我在conctrol pannel中启动ODBC时,我可以看到驱动程序的屏幕截图
我的程序代码(我试过两种方法,但我有同样的错误):
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驱动程序管理器]未找到数据源名称且未指定默认驱动程序
使用UCanAccess JDBC驱动程序:
Class.forName("net.ucanaccess.jdbc.UcanaccessDriver"); Connection conn=DriverManager.getConnection("jdbc:ucanaccess://",user, password); for example: Connection conn=DriverManager.getConnection("jdbc:ucanaccess://c:/pippo.mdb");
所以对于你的例子,它将是Connection conn=DriverManager.getConnection("jdbc:ucanaccess://"+path)
如果您使用的是Windows 64位,则可能需要转到此路径
C:/Windows/SysWOW64/odbcad32.exe
然后我注意到你使用直接路径而不是创建新的System DSN
,你的直接路径是正确的,直到访问文件的路径你必须给出如下所示的完整路径:
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(); } }
我回答了一个类似的问题, 在这里输入链接描述 。
基本上那个时候:
- 您可以通过JDBC-ODBC桥从32位Java连接到Ms-Access
- 您无法通过64位Java的JDBC-ODBC连接到32位Odbc驱动程序。 有消息告诉您,您只能从32位程序连接
- 虽然Microsoft确实提供了64位Ms-Access驱动程序,但它不适用于Java的64位JDBC-ODBC驱动程序。
从那时起,似乎有一个新的开源Ms-Access JDBC驱动程序Ms-Access JDBC驱动程序 。 我不知道它有多好。
你刚才在代码中遗漏了一些内容:
db ="JDBC:ODBC:Driver=Microsoft Access Driver (*.mdb, *.accdb); DBQ="+path;
你需要在Driver=
和)=;
之间添加{}
)=;
。 像这样下面
db ="JDBC:ODBC:Driver={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ="+path;
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);
问题是你应该运行Java 32位尝试安装最新的JDK,它会工作
我使用JDK版本“jdk-7u67-windows-i586.exe”运行它
在64位系统上,您应该:
- 以admin accessdatabaseengine_64.exe运行
- 运行java – 7-64位 – jre。
如果您在NETBEANS中工作,那么在解压缩ucanacess.zip文件后,使用项目的属性窗口在类路径中添加所有jar文件,单击编译选项卡并添加jar文件,然后编译并测试应用程序。
JDBC-ODBC MS-ACCESS连接已停止在JDK8中工作。 我通过在同一台PC上安装JDK7和JDK8来解决了这个问题,一旦安装了JDK7,我将它指定为JDK版本,在我的项目中使用如下Netbeans:
1.右键单击列表中的项目>点击属性
2.在左导航树上列出图书馆
3.CLICK按钮管理平台>点击按钮添加平台…
4.FOLLOW WIZARD,尽管它显示JAVA标准版点击下一步
5.NAVIGATE到C:\ Program Files(x86)\ Java并选择JDK7的文件夹>点击下一步
6.具有正确信息的现场自动填充…>然后单击完成
7.从列表中选择JDK平台>点击关闭>确定
8.JDK7应该出现在图书馆的包装中。
库包中的JDK7单击浏览器中的返回以查看图像后返回此处…
从这里开始,一切都必须顺利进行。
希望它能解决你的问题。
谢谢。