netBeans 和 ucanacces sql 异常仅从代码调用数据库

netBeans and ucanacces sql exception only calling db from code

好吧,这有点奇怪,我成功安装了驱动程序,并且在服务选项卡中,我的数据库表正确显示,但是当我从代码调用驱动程序时,我得到:

java.sql.SQLException: No suitable driver found for jdbc:ucanaccess://C:\Users\sample.mdb
    at java.sql.DriverManager.getConnection(DriverManager.java:689)
    at java.sql.DriverManager.getConnection(DriverManager.java:270)
    at sampleProject.TestDBConnection.main(TestDBConnection.java:16)

这是我的代码:

package sample;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;


public class TestDBConnection {

    public static void main(String[] args) {

        try
        {
           // Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
            System.out.println("sample.mdb");
            Connection conn=DriverManager.getConnection("jdbc:ucanaccess://C:\Users\sample.mdb");
            Statement s = conn.createStatement();
            ResultSet rs = s.executeQuery("SELECT * FROM tableSample");
            while(rs.next())
             System.out.println(rs.getString("RunnersSample") );
        } catch(Exception ex) {
            ex.printStackTrace();
        }
    }

}

有人知道为什么我不能从代码访问吗? 提前致谢!

尝试在路径前使用双斜杠 (//),在路径前使用单斜杠 (/),如下所示:

Connection conn=DriverManager.getConnection("jdbc:ucanaccess://C:/Users/sample.mdb");

出于某种原因,您可能使用了与当前发行版不同的 ucanaccess.jar(可能是从源代码构建的): 在这个 jar 中必须有 META-INF/services/java.sql.Driver 文件。 此外,JDK 必须是 JDK 至少 Java 6.

编辑: 异常是明确的:驱动程序未注册。 有一次,在 java 6 之前,您必须调用 Class.forName 才能注册驱动程序,因此会依次调用驱动程序 class 的静态块初始化程序,从而注册驱动程序。
从java 6开始,你就不用再做了,因为别人帮你做了。但是驱动程序必须通过合同在文件 META-INF/services/java.sql.Driver 的内容中指定驱动程序的名称 class (解压缩 ucanaccess.jar 以确保此文件存在并且它的内容是正确的)。在 NetBeans 服务中,如果驱动程序不兼容,NetBeans 可能会调用 Class.forName 来与旧驱动程序兼容。请注意 META-INF/services/java.sql.Driver 已经放入 ucanacess 2.0.4.1 中(但这是一个非常旧的版本!)所以也许您使用的 jar 与发行版中的不同。 特别是,如果没有 META-INF/services/java.sql.Driver 文件,则表示您的 ucanaccess.jar 不是 sourceforge 发行版的文件。

编辑 2:显然,即使您配置了 ucanaccess,您也必须始终将 ucanaccess.jar 和四个依赖项 jar(hsqldb、jackcess、commons-lang 和 commons-logging)导入到您的 NetBeans 项目库中作为服务。 这是我以上考虑的假设。