连接Access 你未曾遇到过的细节错误
我一个梦想,那就是有朝一日能够用Jdbc 直连上MySQL,SQL Server,Access这些数据库。所谓的DSN-less即通过添加数据源的方式连接数据库我已经成功了。但是目前似乎是用驱动连数据库的居多。数据源的方式不是主流了。所以我要实现我的小小梦想。
折腾的事情就不说了。毕竟得之不难,失之必易。像我这等jdbc直连一个Access数据库都历经坎坷的人,注定这辈子不轻易忘记连接数据库的方法了。
现在我把成功链接的代码贴上,相关路径下的mdb自己建好。我在D:\temp\Student.mdb里建了一张表格info,里面有sno,sname两列。输进去四行数据分别是
001 大熊
002 静香
002 阿福
003 技安
package database; import java.sql.*; public class AccessDemo2 { public static void main(String[] args) { Connection conn; Statement stmt; ResultSet rs; String url = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=d:\\temp\\Student"; try { // 加载JdbcOdbcDriver 驱动 Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver"); } catch (ClassNotFoundException e) { System.out.println("Driver Error "+e); } try { // 通过数据源连接到数据库 conn = DriverManager.getConnection(url); stmt = conn.createStatement(); rs = stmt.executeQuery("select * from info"); while (rs.next()) { System.out.print(rs.getString(1) + " "); System.out.println(rs.getString(2) + " "); } rs.close(); stmt.close(); conn.close(); } catch (SQLException e) { System.out.println("Connection Error "+e); } } }
我就是照着打的。很多时候对照着书本上的代码敲进自己的计算机会发现许多奇怪的错误。
成功连接数据库的结果都是一样的。输出结果也是没有问题的。然而不成功连接却有着各自的不成功。
我这里的致命错误就是 jdbc:odbc:driver={Microsoft Access Driver (*.mdb)}; 和Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver");
前者我在Driver 和(*.mdb)直接省略了括号。后者是在JdbcOdbcDriver和引号之间加了一个括号。 你可以这么做试试看,然后考考你的同事同学,看看他对着异常能不能很快发现错误。
这种细节性的问题我一直犯。但是这次犯过一次下次一定会记住了。
好了Jdbc直连Access是没有问题了。接下来我要成功直连另外两个数据库服务器:MySQL和 SQL Server。 有同学告诉我SQL Sever 2000必须打上sp4补丁。我以前不知道这个情况,我也不知道我的有没有打上sp4补丁了。或者说推荐我不要用13年前的数据库了。有点对不起自己了。那好,我可以试试我另外一个SQL Server 2005。