上一次的笔记中已经初步提到了,JDBC连接数据库的基本六个步骤。
下面就简单的分析一下JDBC的这六个步骤:
1.获取连接Connection对象分析
a.获取数据库的三大要素
|-- URL:不同的数据库系统的URL不相同,但是至少有如下的内容:
主协议:次协议:HOST(主机):PORT(端口):SID(库名)
|-- USER:用户名
|-- PASSWORD:密码
b.DriverManager获取连接的原理:
1
//驱动管理器类
2
class 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内容一样参数不同。
1
select id,first_name from s_emp
2
where dept_id = ? and name like ?;
3
4
insert into t_user values(?,?,?,?);
5
-- 上面的这些情况就可以用setXXX的方法(绑定参数)来传参数。
6
-- 例:
7
Connection con = ConnectionFactory.getConnection();
8
String sql = "XXXXXXXXXXXXXXXXXXXXXXXXXX";
9
PreparedStatement pstm = con.PreparedStatement(sql);
10
//绑定参数
11
pstm.setInt(1,XXX);
12
pstm.setString(2,XXX);
13
. . .
3.CallableStatement用来调用存储过程[procedure]
1
String sql = "{call insert_user(?,?)}"
2
CallableStatement cstm = con.prepareCall(sql);
3
//绑定参数
4
cstm.setString(1,"user");
5
cstm.setString(2,"password");
6
//执行过程,此返回值表示受影响的记录条数
7
int res = cstm.executeUpdate();
8
4.执行SQL
1
statement:
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.处理结果集
1
ResultSet rs:
2
rs.next(); => boolean用于判断结果集中是否还有可读取的元素。
3
rs.getXXX(); get系列方法,用于读去结果集中的元素。
6.释放资源
1
Connection.close();
2
Statement.close();
3
ResultSet.close();
My Java study notes.