Java:MS Access和JDBC连接

时间:2010-11-16 05:19:28

标签: java ms-access jdbc

我想从我的Java代码连接MS Access 怎么做?

我写了以下代码:

import java.sql.*;
public class Test
{
 public static void main(String[] args) 
 {
   String dataSourceName = "test";
   String dbURL = "jdbc:odbc:" + dataSourceName;
   try { 
     Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
     Connection con = DriverManager.getConnection(dbURL, "ify","ify123");

     Statement statement = con.createStatement();
     ResultSet rs = statement.executeQuery("select * from emp");
     System.out.println("hi");
     while ( rs.next() ){
       System.out.println(rs.getString(2));
     }
   }
   catch (Exception err) {
     System.out.println( "Error: " + err );
   }
  }
}

问题是我仍然无法与数据库联系。 我可能做错了什么?

3 个答案:

答案 0 :(得分:1)

这可能是司机管理员注册问题。

您可以将替代语句用作:

DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver()); Connection conn = DriverManager.getConnection(....);

这样做。

最好的运气!

答案 1 :(得分:0)

你的桌子是空的吗?你收到任何错误信息吗?

您是否添加了以下代码以查看是否已建立连接:

ResultSet rs = stmt.executeQuery( sql );
ResultSetMetaData md = rs.getMetaData();
System.out.println( md.getColumnCount() );

编辑:您是否尝试过不使用DSN进行连接:

String url = 
    "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=c:/directory??/???.mdb";

答案 2 :(得分:0)

在ODBC Administrator中启用SQL跟踪日志(有“跟踪”选项卡)。运行程序并查看跟踪日志中记录的内容。我使用来自用户DSN的Access数据库的测试Jython应用程序记录如下:

连接:

....
jython c68-f18  ENTER SQLDriverConnectW 
    HDBC                053C1CC0
    HWND                00000000
    WCHAR *             0x74604EC8 [      -3] "******\ 0"
    SWORD                       -3 
    WCHAR *             0x74604EC8 
    SWORD                        2 
    SWORD *             0x00000000
    UWORD                        0 <SQL_DRIVER_NOPROMPT>

jython c68-f18  EXIT  SQLDriverConnectW  with return code 0 (SQL_SUCCESS)
    HDBC                053C1CC0
    HWND                00000000
    WCHAR *             0x74604EC8 [      -3] "******\ 0"
    SWORD                       -3 
    WCHAR *             0x74604EC8 
    SWORD                        2 
    SWORD *             0x00000000
    UWORD                        0 <SQL_DRIVER_NOPROMPT>
....

获取数据:

jython c68-f18  EXIT  SQLFetch  with return code 0 (SQL_SUCCESS)
    HSTMT               053C2970

jython c68-f18  ENTER SQLGetData 
    HSTMT               053C2970
    UWORD                        1 
    SWORD                        1 <SQL_C_CHAR>
    PTR                 0x034DB270 
    SQLLEN                     6
    SQLLEN *            0x009FF620

jython c68-f18  EXIT  SQLGetData  with return code 0 (SQL_SUCCESS)
    HSTMT               053C2970
    UWORD                        1 
    SWORD                        1 <SQL_C_CHAR>
    PTR                 0x034DB270 [       5] "WOLZA"
    SQLLEN                     6
    SQLLEN *            0x009FF620 (5)

分析该日志,您可能会找到一些有关错误的信息。