java 数据库基本操作 H/|Mq#K
1、java数据库操作基本流程 W&A22jO.1
2、几个常用的重要技巧:
Qx>S>f
可滚动、更新的记录集 V/.Y]dN5
批量更新 #W @6@Mv
事务处理 B;SYO>.W
2w $o;zz1
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 %F3M\)jU
1、取得数据库连接 d?$FAy'o5
1)用DriverManager取数据库连接 |p4F^!9
例子 pa~.[cBI
String className,url,uid,pwd; :K#'?tH
className = "oracle.jdbc.driver.OracleDriver"; VuN=
JX
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; ^+Ie
uid = "system"; exiCy1[+
pwd = "manager"; +#"CgZ]
Class.forName(className); /VgA}[%y
Connection cn = DriverManager.getConnection(url,uid,pwd); JpvE c!cli
2)用jndi(java的命名和目录服务)方式 "]f0wLzh
例子 x\]%TTps
String jndi = "jdbc/db"; 0V
uG(O
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); 21O!CvX
DataSource ds = (DataSource) ctx.lookup(jndi); 6wYd)MDLL
Connection cn = ds.getConnection(); k#_B^J&d
多用于jsp中 I0h/x5
2、执行sql语句 ^8,HJG,!
1)用Statement来执行sql语句 X2 c<.
String sql; +H,/W_/g
Statement sm = cn.createStatement(); G'^Qi}o
sm.executeQuery(sql); // 执行数据查询语句(select) L~%@pf>
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); @MWrUx
2)用PreparedStatement来执行sql语句 JK4vQWy
String sql; 3fgVvt-2
sql = "insert into user (id,name) values (?,?)"; aze}koNE
PreparedStatement ps = cn.prepareStatement(sql); `PXSQf
ps.setInt(1,xxx); R3`!Xj#&M
ps.setString(2,xxx); hF"yxucj$
... _Qs=v0B//
ResultSet rs = ps.executeQuery(); // 查询 9XImgeAs
int c = ps.executeUpdate(); // 更新 -&I)3
UIc )]k%
3、处理执行结果 R=yn4>I
查询语句,返回记录集ResultSet Nih8(pbe
更新语句,返回数字,表示该更新影响的记录数 >T[1=;o]
ResultSet的方法 qn}4PVn4
1、next(),将游标往后移动一行,如果成功返回true;否则返回false ~Wp>tnl
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 Squ'd
Nb~.6bsL
4、释放连接 U6;,<-bL
cn.close(); .Xnw@\k'
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection *^e06xc:
48l!P(>?y
可滚动、更新的记录集 |dcRDOTe
1、创建可滚动、更新的Statement r9G}[#DO
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); {gT2G*Ed^Z
该Statement取得的ResultSet就是可滚动的 Z+!._uA
2、创建PreparedStatement时指定参数 .Az'THD}
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); ;L (dmx?
ResultSet.absolute(9000); {XAm3's
批量更新 ~jWG U-m
1、Statement Goa0OC,
Statement sm = cn.createStatement(); [(Ss^?AJW
sm.addBatch(sql1); {WfZE&B
sm.addBatch(sql2); BM9J/24
... Khp`KPxz%
sm.executeBatch() O}5mDx
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 jI:5[. Y
2、PreparedStatement Wm_:1~
PreparedStatement ps = cn.preparedStatement(sql); s @\UZC
{ WfYu-TK*
ps.setXXX(1,xxx); 's#"~<L^e
... OE_;i}58
ps.addBatch();
&!7{2E\7C
} kH:! 7L_=
ps.executeBatch(); _
T ;+*
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 +72[*_ <
}Fy~DsQ
事务的处理 w;f$oT
1、关闭Connection的自动提交 MD`1KC_m
cn.setAutoCommit(false); #'s}=i}y"C
2、执行一系列sql语句 t<~$?tuZ
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close F#d`nZ=M
Statement sm ; AY3nQH
sm = cn.createStatement(insert into user...); *UM=EQaYk
sm.executeUpdate(); 1C)
l)pV
sm.close(); DPIIE2X
sm = cn.createStatement("insert into corp...); |oCE7'BaP
sm.executeUpdate(); c!#DD;<Q
sm.close(); ]7 W!
3、提交 P,1[NW
cn.commit(); 8&T6
4、如果发生异常,那么回滚 Z1u:OI@(
cn.rollback();