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



我在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

如果有人能揭露我的问题,我将不胜感激,我说的任何错误或愚蠢的事情都可以自由纠正我。

根据这篇帖子,Java8中删除了JDBC-ODBC桥。您可以使用专门用于Access的JDBC驱动程序。我看到很多人提到UCanAccess来连接Access,尽管我自己没有使用过。

根据Oracle的说法,从Java SE 8起,JDK将不再包含JDBC-ODBC桥,并且

理想的是"纯Java":没有本机代码,没有依赖于平台的功能。

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

Lance Andersen写道:

JDBC-ODBC桥一直被认为是过渡性的,是一种不受支持的产品,它只与选定的JDK捆绑包一起提供,而不包含在JRE中。

JDBC-ODBC桥提供了对JDBC 2.0的有限支持,并且不支持JDBC规范的最新版本。

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

为此,您可以查看以下任何一个:

  • EasySoft驱动程序
  • UCanAccess

Oracle(和Sun(的官方立场(自JDBC 1.0以来!(一直是--

[JVM绑定的]JDBC-ODBC桥应被视为过渡解决方案[…]Oracle[was Sun]不支持JDBC-ODBC桥。

然而,我的雇主OpenLink Software从JVM 1.0开始就在JDBC和ODBC之间生产了企业级商业1型桥接器,并且当前版本与当前的JVM 1.8完全兼容。您可以在这里了解更多信息--

  • 单层JDBC-ODBC桥驱动程序——ODBC数据源的JDBC驱动程序
  • 单层ODBC-JDBC桥驱动程序——JDBC数据源的ODBC驱动程序

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

相关内容

  • 没有找到相关文章

最新更新