连接到从Linux访问数据库

我已经创build了我的应用程序,并在windows下进行了testing,这些窗口从访问数据库文件写入/读取数据。

但在现实世界中,它将运行在Linux环境中,而现在我有一个大问题,看起来没有Linux的驱动程序来访问ms acess db,下面是我现在如何build立连接:

private static Connection getConnection() { if (connection == null) { try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String conStr = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=" + configuration.getAccessDbFile(); connection = DriverManager.getConnection(conStr); } catch (Exception e) { e.printStackTrace(); } } return connection; } 

有没有人遇到类似这样的事情,有没有人有一个build议,我该怎么办?

这是我在linux上得到的exception:

 java.lang.NullPointerException at sun.jdbc.odbc.JdbcOdbcDriver.initialize(JdbcOdbcDriver.java:436) at sun.jdbc.odbc.JdbcOdbcDriver.connect(JdbcOdbcDriver.java:153) at java.sql.DriverManager.getConnection(DriverManager.java:582) at java.sql.DriverManager.getConnection(DriverManager.java:207) 

在Linux上运行的应用程序访问MS Access数据库或使用ODBC并不常见。 ODBC是一种Windows技术。 有一些Linux的选项,但这不是一个常见的情况。

正如您发现的,您的Linux机器上没有Access ODBC驱动程序,所以JDBC-ODBC桥将失败。 您可能能够安装合适的ODBC驱动程序,但我不知道任何是免费或开源的。 Linux的事实上的ODBC选项是:

基于UnixODBC的Access商业驱动程序:

可以连接到Access数据库的类型4 JDBC驱动程序:

我没有任何这方面的亲身经历。 类型4的JDBC驱动程序将是理想的,但我会怀疑它的工作原理与广告一样完美。

(我相信你有理由,但是我不得不想知道,为什么你要使用Access数据库,如果你打算部署到Linux机器上,我相信有一个Java应用程序使用Access数据库的唯一好理由就是它是一个现有的Access自定义编程的应用程序用于超出Java应用程序的目的,否则,有许多更好的选择,也可以考虑如果你使用Access的主要原因是这样,你可以使用Access作为一个用户友好的GUI工具的形式和报告,您仍然可以将数据存储在限制性较小的数据库(Derby,SQLLite,MySQL,PostgreSQL,MS SQL server等)中,然后通过ODBC连接到数据库。)这将允许您在Linux上部署Java应用程序,你的数据库哪里最有意义,仍然使用Access从Windows连接到数据库。 我已经做了很多次了。)

使用http://jackcess.sourceforge.net/

您可以使用Java从Linux或Windows读取/写入Acceess数据库。

如果你被困在Access中,但是你与数据库文件的交互非常“简单”(比如你没有做复杂的SQL查询),你可以使用像Jackcess这样的东西 。 它是一个纯java库,允许您操作Access数据库,但是它不提供jdbc接口,所以您必须使用Jackcess API编写代码。

(免责声明,我是一个jackcess开发人员)

UCanAccess是Access数据库的免费开源纯Java JDBC驱动程序。 有关如何使用它的更多信息,请参阅

在没有ODBC的情况下从Java操作Access数据库

通过这样的链接,这将帮助你在这个。

http://www.neowin.net/forum/topic/887410-java-ms-access-driver-for-maclinux/

你可以调试,让我们知道什么是连接字符串传递来获得连接。 因为我认为你应该调用getConnection如下

 DriverManager.getConnection(conStr, "", "");