0

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

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();
        }
    }

}

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

4

2 回答 2

0

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

Connection conn=DriverManager.getConnection("jdbc:ucanaccess://C:/Users/sample.mdb");
于 2015-03-11T23:55:38.943 回答
0

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

编辑:异常是明确的:驱动程序未注册。有一次,在 java 6 之前,您必须调用 Class.forName 才能注册驱动程序,因此会依次调用驱动程序类的静态块初始化程序来注册驱动程序。
从 java 6 开始,您不再需要这样做,因为其他人会为您完成。但是驱动程序必须在 META-INF/services/java.sql.Driver 文件的内容中通过合同指定驱动程序类的名称(解压 ucanaccess.jar 以确保该文件存在并且其内容正确)。在 NetBeans 服务中,如果驱动程序不兼容,NetBeans 可能会调用 Class.forName 以与旧驱动程序兼容。请注意 META-INF/services/java.sql.Driver 已经放在 ucanaccess 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 项目库。这是我上面考虑的一个假设。

于 2015-03-12T09:35:47.880 回答