尝试通过Java 8中的JDBC-ODBC连接到.accdb文件时出现ClassNotFoundException

时间:2014-05-02 12:56:58

标签: java eclipse ms-access-2010 java-8 jdbc-odbc

我正在使用Eclipse EE IDE中的Java项目,我必须查询.accdb文件。 问题是当我尝试加载驱动程序然后连接到数据库时,它会给我一个异常错误。

我的代码:

try{
        String filePath = "//myfilepathtomydb/BLABLA/example.accdb"

        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

        String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=" + filePath;

        Connection database = DriverManager.getConnection(url);

        System.out.println("Connection sucessful");

    } catch (ClassNotFoundException e){     
        System.err.println("Got an exception");
        System.err.println(e.getMessage());
        e.printStackTrace();
    } catch (SQLException sqle) {
        sqle.printStackTrace();
        // TODO: handle exception
    }

例外:

Got an exception
sun.jdbc.odbc.JdbcOdbcDriver
java.lang.ClassNotFoundException: sun.jdbc.odbc.JdbcOdbcDriver
    at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:259)
    at project.Main.main(Main.java:15)

我在64位Windows中使用32位Eclipse,而且我从64位JRE不支持这种连接数据库的方式,所以我使用的是32-位JRE(jdk1.8.0_05),在我的运行配置中,我在VM中使用了'-d32'参数。

显然JdbcOdbcDriver应该在 rt.jar 中,但是当我找到它时,我找不到以下包:sun.jdbc.odbc.JdbcOdbcDriver

如果有人可以解决我的问题,我会感激,我说的任何错误或愚蠢的事情都可以自由地纠正我。

4 个答案:

答案 0 :(得分:8)

根据this帖子,在Java8中删除了JDBC-ODBC Bridge。您可以专门为Access使用JDBC驱动程序。我看到很多人提到UCanAccess连接到Access,虽然我自己没有使用它。

答案 1 :(得分:4)

根据Oracle,从Java SE 8开始,JDK将不再包含JDBC-ODBC Bridge,而

  

理想的是“纯Java”:没有本机代码,没有平台相关功能。

这意味着至少要查找JDBC类型3或4。

Lance Andersen wrote

  

JDBC-ODBC Bridge一直被认为是过渡性的,是一种不受支持的产品,仅提供选择的JDK捆绑包,而不包含在JRE中。

     

JDBC-ODBC桥为JDBC 2.0提供有限的支持,不支持更新版本的JDBC规范。

您应该使用任何第三方数据库驱动程序(如Microsoft不提供任何内容)或使用以前版本的java。 无论如何,我建议使用特定的驱动程序,而不是JDBC-ODBC。

为此您可以查看以下任何内容:

答案 2 :(得分:1)

Oracle(和Sun的)official position已经很久了(因为JDBC 1.0!)就是那个 -

  

[JVM-bundled] JDBC-ODBC Bridge应被视为过渡解决方案[...] Oracle [Sun]不支持JDBC-ODBC Bridge。

但是,自JVM 1.0以来,我的雇主OpenLink Software已经在JDBC和ODBC之间生成了企业级商业类型1桥接器,当前版本与当前的JVM 1.8完全兼容。你可以在这里了解更多 -

答案 3 :(得分:0)

ODBC桥可能不存在于JRE中而不是SUN中。检查你的JRE。