从 java 连接到 MS 访问

Posted

技术标签:

【中文标题】从 java 连接到 MS 访问【英文标题】:connect to MS access from java 【发布时间】:2011-11-15 21:01:12 【问题描述】:

当我编写连接代码时,我尝试使用 jdbc-odbc 桥将我的 java 程序连接到 Access DB,抛出此异常,我无法解决问题

java.sql.SQLException: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
    at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6957)
    at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7114)
    at sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(JdbcOdbc.java:3073)
    at sun.jdbc.odbc.JdbcOdbcConnection.initialize(JdbcOdbcConnection.java:323)
    at sun.jdbc.odbc.JdbcOdbcDriver.connect(JdbcOdbcDriver.java:174)
    at java.sql.DriverManager.getConnection(DriverManager.java:582)
    at java.sql.DriverManager.getConnection(DriverManager.java:207)
    at jdbc.TestAccesDBCon.getConnection(TestAccesDBCon.java:44)
    at jdbc.TestAccesDBCon.main(TestAccesDBCon.java:21)

这是我的代码:

public static void main(String[] args) throws Exception 
    Connection conn = getConnection();
    Statement st = conn.createStatement();
    st = conn.createStatement();
    ResultSet rs = st.executeQuery("SELECT * FROM users");
    ResultSetMetaData rsMetaData = rs.getMetaData();
    int numberOfColumns = rsMetaData.getColumnCount();
    System.out.println("resultSet MetaData column Count=" + numberOfColumns);
    st.close();
    conn.close();
  

  private static Connection getConnection() throws Exception 
    String driver = "sun.jdbc.odbc.JdbcOdbcDriver";  
    String connectionString = "jdbc:odbc:Driver= " +
"Microsoft Access Driver (*.accdb);DBQ=TestDB.accdb;DriverID=01";
    Class.forName(driver);
    return DriverManager.getConnection(connectionString);
  

为什么会抛出这个异常?请帮忙?

【问题讨论】:

发布生成异常的堆栈跟踪。 线程“main”java.sql.SQLException 中的异常:[Microsoft][ODBC Driver Manager] 未找到数据源名称且未指定默认驱动程序 你的数据库在哪个目录?您可能想尝试指定整个事情 与***.com/questions/6225300/…相关 @dann.dev,在我的 java 项目的根目录中 【参考方案1】:

您似乎没有安装 ODBC Access 驱动程序(安装 Access 时,ODBC 驱动程序是可选的!),尝试从 Access 安装介质安装驱动程序,如果您在 64 位系统上,则应安装 64 位驱动程序的版本。

如果您在控制面板下的管理工具中进入 ODBC 管理器 GUI,将无法在源选项卡下找到源:

Microsoft Access Driver (*.accdb)

这意味着您的系统上没有安装驱动程序,您需要安装它。

您可以从here 下载Access 2010 驱动程序。

【讨论】:

可能是,但是如何安装,请帮忙 从访问安装媒体(通常是光盘)或从这里下载它们:microsoft.com/download/en/details.aspx?id=13255 从数据源 (ODBC ),在用户 DSN 中找到 Microsoft Access Driver (.mdb,.accdb),但在系统 DSN 中未找到,当我尝试从用户DSN配置它,出现错误消息说找不到驱动程序,但是如何安装驱动程序? 查看我发布的 Microsoft 下载页面的链接。 它现在可以了,但是我应该写db的完整路径,即使它在我的java项目的目录中,为什么?【参考方案2】:

你可以试试这段代码

        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        String DBpath = "Your Database Path";
        String driver = "jdbc:odbc:Driver=Microsoft Access Driver (*.accdb);DBQ=";
        driver += DBpath.trim() + ";DriverID=22;READONLY=true";
        Connection con = DriverManager.getConnection(driver, "", "");
        Statement s = con.createStatement();
        con = DriverManager.getConnection(driver, "", "");
        return (Statement) s;

【讨论】:

它无需编写此“;DriverID=22;READONLY=true:”即可工作,除了安装 MS 访问驱动程序和添加 db 的完整路径外,我的代码中没有任何更改。我想知道为什么我要写db的完整路径,即使它在java项目目录中?

以上是关于从 java 连接到 MS 访问的主要内容,如果未能解决你的问题,请参考以下文章

无法从 Java WebService 连接到 MS Access 数据库

使用 Java 从 Oracle 服务器连接到 MS SQL Server

连接到 MS Access 数据库

node.js 中的 ms 访问数据库连接

如何从 Spring JdbcTemplate 连接到受密码保护的 MS Access 数据库?

从经典 ASP 连接到 MS Access 数据库