从linux连接到访问数据库

时间:2011-04-21 09:45:31

标签: java linux ms-access

我已经创建了我的应用程序,并在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)

5 个答案:

答案 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驱动程序。有关如何使用它的更多信息,请参阅

Manipulating an Access database from Java without ODBC

答案 4 :(得分:0)

通过这样的链接来帮助你。

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

并且您可以调试并告诉我们您传递的连接字符串是什么来获取连接。因为我认为你应该按下面的方式调用getConnection

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