java 数据库基本操作 Bq\%]2;eo{
1、java数据库操作基本流程 Wx^L~[l
2、几个常用的重要技巧: y0z}[hZ
可滚动、更新的记录集 jPFA\$To
批量更新 U/TF,JUI
事务处理 yJ?4B?p(
h>fY'r)DAx
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 T]0qd^\4w
1、取得数据库连接 **oN/5
1)用DriverManager取数据库连接 oo/#]a
例子 )K%AbKn
String className,url,uid,pwd; BCFvqhF7s
className = "oracle.jdbc.driver.OracleDriver"; JH2d+8O:qK
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; .)Du
;
uid = "system"; 0Pbv7)=XL
pwd = "manager"; 2o6%P}C
Class.forName(className); LB-4/G$
Connection cn = DriverManager.getConnection(url,uid,pwd); {6RT&w
2)用jndi(java的命名和目录服务)方式 `Up3p24
例子 9CxU:;3
String jndi = "jdbc/db"; @UX'(W
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); -MeGJX:^I
DataSource ds = (DataSource) ctx.lookup(jndi); {Z$Aw4a"d
Connection cn = ds.getConnection(); dMYDB
多用于jsp中 -cOLgrmp
2、执行sql语句 A5z5e#
,u
1)用Statement来执行sql语句 {&m^*YN/
String sql; 3Ju<jXoo!
Statement sm = cn.createStatement(); !hEtUF
sm.executeQuery(sql); // 执行数据查询语句(select) l+RBe<Mq
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); (rvK@
2)用PreparedStatement来执行sql语句 +1_NB;,e
String sql; va| 1N/&
sql = "insert into user (id,name) values (?,?)"; j^>J*gLM}W
PreparedStatement ps = cn.prepareStatement(sql); ^Qq_|{vynf
ps.setInt(1,xxx); IL&Mf9m
ps.setString(2,xxx); *ewE{$UpK
... yX/ 9jk
ResultSet rs = ps.executeQuery(); // 查询 m{;2!
int c = ps.executeUpdate(); // 更新 }5u$/c@f1
e; ]-&A)M6
ResultSet.absolute(9000); V+(1U|@~
批量更新 wL\OAM6R
1、Statement "@#^/m)
Statement sm = cn.createStatement(); Rq|7$O5
sm.addBatch(sql1); >;LXy
sm.addBatch(sql2); M2l0x @|
... iP)`yB5 `
sm.executeBatch() il|e5TD^
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 )w4i0Xw^C:
2、PreparedStatement ~+
Mp+gE
PreparedStatement ps = cn.preparedStatement(sql); -XRn%4EX?
{ j
Jt"=
ps.setXXX(1,xxx); Op0n.\>
... 49W@?:b
ps.addBatch(); yb\T<*
} +`}QIp0
ps.executeBatch(); [3"k :
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 clV3x`z
?0*,x)t
事务的处理 D=Jj !;
1、关闭Connection的自动提交 f{mWy1NH\
cn.setAutoCommit(false); B]iPixA6
2、执行一系列sql语句 JFewOt3
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close Se{x-vn?p
Statement sm ; ~.7/o0'+
sm = cn.createStatement(insert into user...); )31{.c/
sm.executeUpdate(); /N '0@q
sm.close(); iI.pxo
s
sm = cn.createStatement("insert into corp...); |qm_ESzl
sm.executeUpdate(); =HapCmrx8
sm.close(); ZRHK?wg'#
3、提交 &6wD
cn.commit(); =p{55dR
4、如果发生异常,那么回滚 Pu>jECcz
cn.rollback();