java 数据库基本操作 \+/ciPzA-
1、java数据库操作基本流程 F\&^(EL
2、几个常用的重要技巧: "X!1^)W-8
可滚动、更新的记录集 FqGMHM\J
批量更新 Y%y
事务处理 nQ|($V1?W
(E,[Ad,$
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 0wSy[z4V
1、取得数据库连接 t5i58@{~
1)用DriverManager取数据库连接 %qE"A6j
例子 vg@5`U`^h
String className,url,uid,pwd; {[/A?AV;F
className = "oracle.jdbc.driver.OracleDriver"; "|Y y"iB[
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; Wlq3r#
uid = "system"; 8yDsl
pwd = "manager"; J{kS4v*J
Class.forName(className); v+trHdSBYE
Connection cn = DriverManager.getConnection(url,uid,pwd); H"Hl~ ~U
2)用jndi(java的命名和目录服务)方式 P|lDW|}D@
例子 IZ^:wIKo{
String jndi = "jdbc/db"; a+ O?bO
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); 1=9GV+`n
DataSource ds = (DataSource) ctx.lookup(jndi); S1~K.<B
Connection cn = ds.getConnection(); =|empv#
多用于jsp中 9AQ,@xP|
2、执行sql语句 @;y@Hf'Jv
1)用Statement来执行sql语句 _(~E8g
String sql; &
@_PY
Statement sm = cn.createStatement(); xC0y2+)|
sm.executeQuery(sql); // 执行数据查询语句(select) )Spa
F)N8
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); 9B83HV4J
2)用PreparedStatement来执行sql语句 vd$>nJ"
String sql; :9x]5;ma
sql = "insert into user (id,name) values (?,?)"; rFm?Bu
PreparedStatement ps = cn.prepareStatement(sql); 7PUy`H,&
ps.setInt(1,xxx); ?8< =.,r
ps.setString(2,xxx); 8I#^qr5
... %1{O
ResultSet rs = ps.executeQuery(); // 查询 M%Vp_
0
int c = ps.executeUpdate(); // 更新 K)[\IJJM
iyUnxqP
3、处理执行结果 JX&%5sn(
查询语句,返回记录集ResultSet :ec>[N~KG
更新语句,返回数字,表示该更新影响的记录数
Fe$o*r,
ResultSet的方法 k
7@:e$7
1、next(),将游标往后移动一行,如果成功返回true;否则返回false H.]<fvP
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 usoyH0t!?
u$ci{<
4、释放连接 E&Lml?@
cn.close(); 2\|sXC
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection \'('HFr,
z.2UZ%:
可滚动、更新的记录集 IkA~+6UY
1、创建可滚动、更新的Statement u% 1JdEWZd
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); yiH;fK +x
该Statement取得的ResultSet就是可滚动的 83# <Yxk~
2、创建PreparedStatement时指定参数 T-7(3#&
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); a%6=sqxE
ResultSet.absolute(9000); n? =O@yq
批量更新 A5 4u}
1、Statement )u]=^
Statement sm = cn.createStatement(); I)r6*|mz
sm.addBatch(sql1); asy:[r"
sm.addBatch(sql2); /1.Z=@ 7
... 9ku|w#%I
sm.executeBatch() 2pSp(@N3
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 f/0k,~,*
2、PreparedStatement M9~'dS'XI
PreparedStatement ps = cn.preparedStatement(sql); P9S)7&+DL
{ GH3RRzp r
ps.setXXX(1,xxx); B_8JwMJu3
... J5Q.v;
ps.addBatch(); ]1h9:PF
} j9/iBK\Y
ps.executeBatch(); qzZ;{>_f
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 !g|[A7<|
dg+"G|nr
事务的处理 !V4 (- 8
1、关闭Connection的自动提交 _KyhX|
cn.setAutoCommit(false); /%{CJ0Y
2、执行一系列sql语句 *lheF>^
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close 'fzJw
Statement sm ; pk;S"cnk
sm = cn.createStatement(insert into user...); mr]~(]B?r
sm.executeUpdate(); GFnwj<V+{
sm.close(); lD#
yXLaC\
sm = cn.createStatement("insert into corp...); u,`V%J?vW
sm.executeUpdate(); v!n|X7
sm.close(); !SLfAFcS
3、提交 G \$x.
cn.commit(); lm +s5}*%o
4、如果发生异常,那么回滚 ChNT;G<6$
cn.rollback();