在 java 中与 MS Access 数据库建立 SQL 连接时找不到合适的驱动程序

Posted

技术标签:

【中文标题】在 java 中与 MS Access 数据库建立 SQL 连接时找不到合适的驱动程序【英文标题】:No suitable driver found when making SQL connection to MS Access Database in java 【发布时间】:2014-06-08 23:06:54 【问题描述】:

我在一个简单的 java 应用程序中有一个 Jbutton (GetDataFromDB),它假设将下面代码中路径中描述的数据库中的数据加载到应用程序的 Jtable 中。

将答案编辑为代码:

private void GetDataFromDBActionPerformed(java.awt.event.ActionEvent evt)                                               
    Connection con;
    ResultSet rs = null;
    Statement stmt;

    try 

    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    con = DriverManager.getConnection("jdbc:odbc:Driver=MS Access Driver (*.mdb, *.accdb);Dbq=C:\\Users\\Bruger\\Documents\\Database11.accdb");

    stmt = con.createStatement();
    String query = null;
    query = "select * from cost";

    rs = stmt.executeQuery(query);

    i = 0;

    while (rs.next())
        i = i + 1;
        jTable.getModel().setValueAt(rs.getString(1), i, 1);
        jTable.getModel().setValueAt(rs.getString(2), i, 2);
    


    rs.close();
    stmt.close();
    con.close();
     catch(Exception err)
    System.out.println(err.getMessage());


  

当我按下按钮时,我在运行输出窗口中收到以下消息:

没有找到适合 jdbc:odbc:Driver=Microsoft Access Driver (.mdb, .accdb);Dbq=C:\Users\Bruger\Documents\Database11 的驱动程序。数据库

我的代码顶部有导入:

import java.sql.*;

我也尝试从“Microsoft Access Driver”更改为“MS Access Driver”,但我在运行输出窗口中收到相同的消息,即

没有找到适合 jdbc:odbc:Driver=MS Access Driver (.mdb, .accdb);Dbq=C:\Users\Bruger\Documents\Database11 的驱动程序。数据库

非常感谢您提供的所有帮助、意见和反馈。

【问题讨论】:

con = DriverManager.getConnection(...) 之前使用Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 【参考方案1】:

取决于驱动程序,如果您是 JDK 6 之前的**!

您需要注册驱动程序。

尝试添加:

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

所以:

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
con = DriverManager.getConnection("jdbc:odbc:Driver=Microsoft Access Driver (*.mdb, *.accdb);Dbq=C:\\Users\\Bruger\\Documents\\Database11.accdb");

还值得一提的是,您无需每次获得连接时都执行此操作,只需一次以确保已加载类。

有很多与此相关的***问题,但原因如下:

来源 - 来自 Java 教程:

在以前的 JDBC 版本中,要获得连接,您首先必须 通过调用方法 Class.forName 来初始化 JDBC 驱动程序。这 方法需要 java.sql.Driver 类型的对象。每个 JDBC 驱动程序 包含一个或多个实现接口的类 java.sql.驱动程序。 ...在您的班级中找到的任何 JDBC 4.0 驱动程序 路径会自动加载。 (但是,您必须手动加载任何 使用 Class.forName 方法的 JDBC 4.0 之前的驱动程序。)


关于一个相关且非常重要的说明。

我还建议查找如何处理连接。数据库连接和游标等外部资源如果您不熟悉它们很容易泄漏。查找“try finally blocks”,或者最近在 java 7+“try-with-resources”中查找。

【讨论】:

感谢您的回答 GoldenJam,它解决了这个问题,也感谢您指出搜索策略以建立更复杂的连接 现在还有一个问题。当我启动应用程序并按下按钮时。什么都没发生。该表没有像我希望的那样填充。我得到你在运行输出窗口中指出的这个字符串,即 sun.jdbc.odbc.JdbcOdbcDriver

以上是关于在 java 中与 MS Access 数据库建立 SQL 连接时找不到合适的驱动程序的主要内容,如果未能解决你的问题,请参考以下文章

在 ms-access 中与 mysql 服务器的 DSN-less 连接不记得用户名和密码

错误 - 与 MS Access 的 Java 连接

在 Mac 上与 UnixODBC 和 FreeTDS 建立 MS Access 连接

尝试从 MS Access DB 检索字段值时,Java 中的希腊词作为问号 [重复]

从 JAVA 访问存储在 MS-Access 数据库中的日期/时间数据

MS Access:比较 2 个重复的表