-
JDK1.7以下连接Access:ODBC连接方式
-
使用的工具
- java JDK 1.7;
- Access 2013;
- ODBC数据源;
-
数据库结构
- 建立数据库shop,在其中添加表goods,表结构如下:
-
-
数据如下:
- 建立ODBC数据源:控制面板-->管理工具-->数据源(odbc)
|
|
|
|
- 具体代码:目前环境是JDK1.8,下列代码没有测试
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.util.Date; public class Example11_1 { public static void main(String args[]) throws Exception { Connection con = null; Statement sql; ResultSet rs;
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // 用ODBC连接数据源的方式 con = DriverManager.getConnection("jdbc:odbc:myData","",""); // 用java代码直接连接access文件 // con = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=shop.mdb","","");
sql = con.createStatement(); rs = sql.executeQuery("SELECT * FROM goods WHERE price>0"); while(rs.next()) { String number = rs.getString(1); String name = rs.getString(2); Date date = rs.getDate("madTime"); double price = rs.getDouble("price"); System.out.printf("%-4s",number); System.out.printf("%-6s",name); System.out.printf("%-15s",date.toString()); System.out.printf("%6s\n",price); } con.close(); } } |
-
在java代码中建立Jdbc-Odbc桥接器,代码是:
- Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
-
连接数据库,这里要用到java.sql包中的Connection类声明一个对象,再用类DriverManager调用它的静态方法getConnection创建这个连接。
- Connection con=DriverManager.getConnection("jdbc:odbc:数据源名字","数据源用户名","数据源密码");
-
JDK1.8连接Access
-
说明:JDK1.8不再包含access桥接驱动,所以要手动引入Access驱动包
- 引入了jar包后,相关的调用类也发生了变化,改变如下:黄色高亮为改变部分;
-
package hey.up;
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement;
public class JDBCAccess { public static void main(String[] args) { // url表示需要连接的数据源的位置,此时使用的是JDBC-ODBC桥的连接方式,url是"jdbc:odbc:数据源名" String url = "jdbc:Access:///d:/a1.mdb"; try { Class.forName("com.hxtt.sql.access.AccessDriver"); Connection conn = DriverManager.getConnection(url); Statement stat = conn.createStatement(); String sql = "select * from goods"; ResultSet rs = stat.executeQuery(sql); while(rs.next()){ System.out.println(rs.getString(2)); } } catch (ClassNotFoundException | SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } |
-
效果
-
注意:网上还有一种将Access_JDBC30.jar放入JDK中的lib文件下,利用classpath系统变量来引用,这样就省去了将jar包引入项目的步骤。但此方式我没有测试通过,所以只是简单记录下来操作步骤;
- 把Access_JDBC30.jar放到JDK的lib里;
- 添加了以后,修改CLASSPATH,环境变量的值需要加上这个jar包,路径为驱动包的绝对路径,例如C:\ProgramFiles\Java\jre1.8.0_65\lib\Access_JDBC30.jar,添加完后,需要重启电脑。[如果CLASSPATH中已有值,在最后添加就行,不同值之间添加分号;]一定要重启电脑!