我在Netbeans中有一个使用SQL连接到Access数据库的程序。我准备完成并从程序中创建一个jar文件,但是当我'构建并清理'然后尝试在命令中运行程序时,我得到:
java.sql.SQLException:[Microsoft] [ODBC驱动程序管理器]未找到数据源名称且未指定默认驱动程序
在我的代码中,我使用以下方式直接访问数据库:
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=C:\\Users\\d9t\\Desktop\\Resource_DB.accdb");
答案 0 :(得分:0)
我多年没有这样做(JDBC-ODBC),但我认为除了你所做的,你还需要添加如下数据源:http://msdn.microsoft.com/en-us/library/ca6axakh(v=vs.80).aspx
答案 1 :(得分:0)
听起来您在运行程序时可能需要将驱动程序jar添加到类路径中。 运行指定类路径(-classpath或-cp)
的程序java -classpath driver.jar;myprogram.jar my.package.MainClass
其中my.package.MainClass如果要运行的类
答案 2 :(得分:0)
我只是尝试使用NetBeans 7.4重新创建您的问题,但未成功。我的项目在NetBeans IDE中正确运行,在执行“清理和构建”后,它也通过命令行成功运行
java -jar AccessTest.jar
出于诊断目的,请尝试以下操作:
将以下两行代码添加为main
方法的第一行:
System.out.println(System.getProperty("sun.arch.data.model"));
System.exit(0);
在IDE中运行代码并记下它打印到控制台的编号。 (它将是“32”或“64”。)
然后重新构建项目并从命令行运行.jar
文件。当你以这种方式运行时它会报告相同的值吗?
编辑重新评论
上述诊断的输出确认了问题。 32位版本的Access数据库引擎(例如“ACE”)已安装在计算机上,并且NetBeans配置已设置为在NetBeans本身内的32位JVM中运行应用程序,因此工作正常。但是,当.jar文件从命令行运行时,它在64位JVM中运行,因此Access ODBC驱动程序不可用。
这里的关键点是,已安装的ACE驱动程序的“位数”必须与运行Java应用程序的JVM的“位数”相匹配。这不是开发人员可以控制的东西。即使您使用System.getProperty
测试来确定运行应用程序的“位数”,也无法保证将安装相应的ACE驱动程序。
你可以做的是构建你的应用程序以使用旧的32位“Jet”驱动程序......
{Microsoft Access Driver (*.mdb)}
...因为这在所有Windows机器上都可用。您的数据库文件必须使用较旧的.mdb
文件格式(因为Jet无法读取.accdb
文件),您可以使用System.getProperty
测试来确保应用程序在32-下运行位JVM。 (也就是说,如果调用返回“64”,只是告诉用户他们必须在32位JVM下运行应用程序然后退出。)
答案 3 :(得分:0)
我偶然发现了这个问题http://ucanaccess.sourceforge.net/site.html
安装UCanAccess-2.0.1-bin.zip并包含所有文件。我遇到了一些小错误,例如无法将'和'传递到Access,但它成功地允许64位计算机连接32位访问。
希望这有助于您访问程序员!