2JDBC(Java Data Base Connectivity,java数据库连接),由一些接口和类构成的API.
JDBC属于J2SE的一部分.最重要的2个包,java.sql javax.sql
上图中我们可以看出,sun公司提供了JBDC的接口,各大数据库厂商的Driver去实现这些接口,链接数据库。
连接DB的步骤:
1.注册驱动(做一次)
2.建立连接
3.创建执行SQL的语句
4.执行语句
5.处理执行的结果ResultSet
6.释放资源
Demo:
package cj; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class base { public static void main(String[] args) throws ClassNotFoundException { Connection conn = null; Statement statement = null; ResultSet rs = null; try { // 1.注册驱动 //DriverManager.registerDriver(new oracle.jdbc.OracleDriver()); //System.setProperty("jdbc.drivers","oracle.jdbc.OracleDriver"); Class.forName("oracle.jdbc.driver.OracleDriver"); // 2.建立连接 String dbUrl = "jdbc:oracle:thin:@127.0.0.1:1521:XE"; conn = DriverManager.getConnection(dbUrl, "kenny", "kenny"); // 3.创建执行sql的语句 statement = conn.createStatement(); // 4.执行语句 rs = statement.executeQuery("select * from test"); // 5.处理结果 while (rs.next()) { System.out.println(rs.getObject(1) + "\t" + rs.getObject(2)); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { if (rs != null) rs.close(); if (statement != null) statement.close(); if (conn != null) conn.close(); } catch (Exception e) { } } } }
注册驱动:
1.
DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
DriverManager相当于一个驱动管理器(可以注册多个驱动),其中DriverManager中有一个
java.util.Vector<Driver> result = new java.util.Vector<Driver>();
drivers相当于一个列表,DriverManager的getConnection方法会拿着URL一个个问driver,是否可以建立连接,直到找到为止。
2.
System.setProperty("jdbc.drivers","oracle.jdbc.OracleDriver");
DriverManager中的静态方法initialize中调用了loadInitialDrivers(),在loadInitialDrivers中
new sun.security.action.GetPropertyAction("jdbc.drivers")。
3.
Class.forName("oracle.jdbc.driver.OracleDriver");
forName方法会根据oracle.jdbc.driver.Driver,将这个类加载到VM中(是加载带VM中,不一定创建了这个类的实例).根据类的加载,会马上调用他的静态代码快。
例如:msyql中Driver的实现
// // Register ourselves with the DriverManager // static { try { java.sql.DriverManager.registerDriver(new Driver()); } catch (SQLException E) { throw new RuntimeException("Can't register driver!"); } }
所以我们可以得出,forName注册了一次驱动,其他2种方式都注册了2次驱动.这样可能也是为什么是最常用的方式的原因吧。
建立连接
Connection conn = DriverManager.getConnection(url, user, password); url格式: JDBC:子协议:子名称//主机名:端口/数据库名?属性名=属性值&… User,password可以用“属性名=属性值”方式告诉数据库; 其他参数如:useUnicode=true&characterEncoding=GBK。