从linux连接到访问数据库

Lon*_*don 14 java linux ms-access

我已经创建了我的应用程序并在Windows下进行了测试,它在访问DB文件中写入/读取.

但是在现实世界中,它将在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;
    }
Run Code Online (Sandbox Code Playgroud)

有没有人遇到类似的事情,有人有建议我该怎么办?

这是我在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)
Run Code Online (Sandbox Code Playgroud)

kal*_*ech 7

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

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

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

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

我没有任何这些经验.4型JDBC驱动程序将是理想的,但我怀疑它的工作方式与宣传的一样完美.

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

  • 大多数开发人员在这种情况下做的第一步就是导出Access数据库并将其导入合理的东西,如MySQL.请参阅http://databases.aspfaq.com/database/what-are-the-limitations-of-ms-access.html,了解为什么Access不应用于"真实"的任何内容. (3认同)
  • @wallyk:"真实"是什么意思?Linux应用程序?如果是这样,我同意这一点.Web应用程序?如果是的话,是的,我同意这一点.但是有一大堆应用程序,Access/Jet/ACE是一个非常合适的工具/数据存储 - 它和其他任何东西一样"真实".总之,失去反访问偏见. (2认同)
  • @ David-W-Fenton:这不是偏执 - 我有数十年的开发和维护经验,可以节省陷入Microsoft技术的应用程序."真实"是指大量的并发用户,根据我的经验,其他顾问和行业评论员对Access的用户数大于3或4.对于独立应用程序,Access往往没问题.但是,如果它被移植到具有多个用户*或*自动数据输入的任何情况下,Access的并发性和可扩展性限制很快就会赶上设计. (2认同)
  • ...所以,我不明白为什么人们常常抱怨少于5个用户的Access.我无法想象他们做的事情是完全错误的.另一方面,自1996年以来,我一直在专业地做这个,并且已经阅读了很多优化Access,并努力了解数据库引擎的工作原理.我不明白为什么这么多人似乎不愿意做同样的事情.升级到不同的后端并不能解决设计糟糕的应用程序设计 - 没有灵丹妙药. (2认同)

小智 7

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

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