2010-11-16 54 views
0

我想从我的Java代码连接到MS Access。
如何做到这一点?Java:MS Access和JDBC连接

我写了下面的代码:

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

的问题是,我仍然无法与数据库coneect。 我可能会做错什么?

+1

你碰巧得到在catch块中打印的任何错误消息吗? – CoolBeans 2010-11-16 05:40:28

+0

您是否还将“测试”添加为DSN? – CoolBeans 2010-11-16 05:44:32

+0

“测试”在ODBC数据源管理器中创建为用户DSN。 – GamDroid 2010-11-16 06:38:53

回答

1

这可能是一个驱动程序管理器注册问题。

您可以使用其他的语句为:

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

这样做。

祝你好运!

+0

好的!将尝试使用此并检查出来。 – GamDroid 2010-11-16 09:02:02

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"; 
+0

我的表不是空的。它只是不给任何输出。 – GamDroid 2010-11-16 09:01:02

+0

@GamDroid,你有列计数?您是否尝试过没有DSN或使用空字符串作为用户名和密码? – camickr 2010-11-16 16:34:23

0

启用SQL跟踪日志ODBC管理员(有Trace选项卡)。运行您的程序并查看跟踪日志中记录的内容。我使用Access数据库的用户DSN测试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) 

分析这些日志,你可能会找到一些在错误信息。

+0

好的,谢谢!将检查出来。 – GamDroid 2010-11-16 12:53:57