我已经创建了我的应用程序,并在windows下进行了测试,它在访问DB文件中写入/读取。
但在现实世界中,它将在linux环境中运行,现在我遇到了一个大问题,似乎没有驱动程序可以让linux访问ms acess db,这就是我现在建立连接的方式:< / p>
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;
}
有没有人遇到类似的事情,有人建议我该怎么办?
这是我在linux上的例外:
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)
答案 0 :(得分:7)
在Linux上运行的应用程序访问MS Access数据库或使用ODBC的情况并不常见。 ODBC是一种Windows技术。 Linux有一些选项,但这不是常见的情况。
正如您所发现的,Linux机器上没有Access ODBC驱动程序,因此JDBC-ODBC桥接器失败。您可能能够安装合适的ODBC驱动程序,但我不知道任何免费或开源的驱动程序。 linux的defacto 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从Access连接到数据库。)这将允许您在Linux上部署您的Java应用程序,在最有意义的地方部署您的数据库,并且仍然使用Access从Windows连接到数据库。我已经多次这样做了。)
答案 1 :(得分:7)
使用http://jackcess.sourceforge.net/
您可以使用Java从Linux或Windows读取/写入Access数据库。
答案 2 :(得分:4)
如果您遇到Access,但您与数据库文件的交互非常“简单”(例如,您没有执行复杂的SQL查询),则可以使用Jackcess之类的内容。它是一个纯java库,允许您操作Access数据库,但不提供jdbc接口,因此您必须使用Jackcess api编写代码。
(免责声明,我是一名千斤顶开发者)
答案 3 :(得分:3)
UCanAccess是一个用于Access数据库的免费开源纯Java JDBC驱动程序。有关如何使用它的更多信息,请参阅
答案 4 :(得分:0)
通过这样的链接来帮助你。
http://www.neowin.net/forum/topic/887410-java-ms-access-driver-for-maclinux/
并且您可以调试并告诉我们您传递的连接字符串是什么来获取连接。因为我认为你应该按下面的方式调用getConnection
DriverManager.getConnection(conStr, "", "");