在Netbeans中制作包含SQL命令的jar文件

时间:2014-01-22 17:14:24

标签: java sql-server ms-access netbeans

我在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");

4 个答案:

答案 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位访问。

希望这有助于您访问程序员!