从 linux 连接到访问数据库

2022-09-04 01:51:32

我已经创建了我的应用程序,并在Windows下对其进行了测试,该窗口写入/读取/读取访问数据库文件。

但是在现实世界中,它将在linux环境中运行,我现在有一个大问题,似乎没有linux的驱动程序来访问ms acess db,这就是我现在如何建立连接:

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)

答案 1

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

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

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

一个 4 类 JDBC 驱动程序,据说可以连接到 Access 数据库:

我对这些都没有个人经验。类型4 JDBC驱动程序将是理想的,但我怀疑它是否像宣传的那样完美。

(我相信您有理由知道,但是如果您计划部署到Linux计算机,那么我不得不想知道为什么您要使用Access数据库。我认为,让 Java 应用程序使用 Access 数据库的唯一好理由是,如果它是一个现有的 Access 应用程序,其自定义编程用于 Java 应用程序之外的目的。否则,有许多更好的选择。还要考虑,如果您使用Access的主要原因只是为了将Access用作表单和报告的用户友好型GUI工具,您仍然可以将数据存储在限制较少的数据库中(Derby,SQLLite,MySQL,PostgreSQL,MS SQL Server等),然后通过ODBC从Access连接到数据库。这将允许您在Linux上部署Java应用程序,在最有意义的地方部署数据库,并且仍然使用Access从Windows连接到数据库。我已经这样做过很多次了。


答案 2

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

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


推荐