上一次的笔记中已经初步提到了,JDBC连接数据库的基本六个步骤。
下面就简单的分析一下JDBC的这六个步骤:
1.获取连接Connection对象分析
a.获取数据库的三大要素
|-- URL:不同的数据库系统的URL不相同,但是至少有如下的内容:
主协议:次协议:HOST(主机):PORT(端口):SID(库名)
|-- USER:用户名
|-- PASSWORD:密码
b.DriverManager获取连接的原理:
1//驱动管理器类
2class DriverManager{
3 static Vector<Driver> drivers = new Vector<Driver>();
4 public static void registerDriver(Driver d){
5 driver.add(d);
6 }
7/** *//**获取连接的方法*/
8 public static Connection getConnection(String url,String user,String pwd) throws SQLException{
9 Properties info = new Properties();
10 info.setProperty("user",user);
11 info.setProperty("password",pwd);
12 return getConnection(url,info);
13 }
14 public static Connection getConnection(String url,Properties info)throws SQLException{
15/**//*迭代多由的驱动,并且一次与给定的URL进行匹配,如果成功则返回当前驱动的Connection对象*/
16 Iterator<Driver> iter = drivers.iterator();
17 while(iter.hasNext()){
18 Driver d = iter.next();
19 if(匹配(url,d)){
20 return d.connect(url,info);
21 }else{
22 continue;
23 }
24 }
25/**//*到此都没有返回,说明没有匹配成功,则抛出SQLException异常*/
26 throw new SQLException("no suitable driver");
27 }
28}
2. Statement 调用静态SQL
PreparedStatement 来执行动态SQL,可以为SQL动态绑定参数。
如:同构SQL,SQL内容一样参数不同。
1select id,first_name from s_emp
2where dept_id = ? and name like ?;
3
4insert into t_user values(?,?,?,?);
5-- 上面的这些情况就可以用setXXX的方法(绑定参数)来传参数。
6-- 例:
7Connection con = ConnectionFactory.getConnection();
8String sql = "XXXXXXXXXXXXXXXXXXXXXXXXXX";
9PreparedStatement pstm = con.PreparedStatement(sql);
10//绑定参数
11pstm.setInt(1,XXX);
12pstm.setString(2,XXX);
13. . .
3.CallableStatement用来调用存储过程[procedure]
1String sql = "{call insert_user(?,?)}"
2CallableStatement cstm = con.prepareCall(sql);
3//绑定参数
4cstm.setString(1,"user");
5cstm.setString(2,"password");
6//执行过程,此返回值表示受影响的记录条数
7int res = cstm.executeUpdate();
8
4.执行SQL
1statement:
2
3 executeQuery(selectSQL); => ResultSet
4 executeUpdate(dmlSQL); => int
5 execute(arbiSQL); => boolean
6
7 if(stm.execute(sql)){
8 //为真,表示执行select语句
9 ResultSet rs = stm.getResultSet();
10 }else{
11 //为假,表示执行非select语句
12 int res = stm.getUpdateCount();
13 }
5.处理结果集
1ResultSet rs:
2 rs.next(); => boolean用于判断结果集中是否还有可读取的元素。
3 rs.getXXX(); get系列方法,用于读去结果集中的元素。
6.释放资源
1Connection.close();
2Statement.close();
3ResultSet.close();
My Java study notes.