从java连接到MS访问

时间:2011-11-15 21:01:13

标签: java ms-access jdbc odbc

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

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

为什么抛出此异常?请帮忙吗?

2 个答案:

答案 0 :(得分:3)

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

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

Microsoft Access Driver (*.accdb)

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

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

答案 1 :(得分:1)

您可以尝试使用此代码

        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;