java 数据库基本操作 Gb4k5jl
1、java数据库操作基本流程 SxI='z_S.f
2、几个常用的重要技巧: -W38#_y/\
可滚动、更新的记录集 %}elh79H*
批量更新 e$u=>=jV]
事务处理 rVB,[4N
W2?6f:
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 /zJDQ'k0
1、取得数据库连接 US[{
Q
1)用DriverManager取数据库连接 2~h! ouleY
例子 fkbHfBp[(A
String className,url,uid,pwd; M_lQ^7/
className = "oracle.jdbc.driver.OracleDriver"; &mXJL3iN
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; 3#<b!Yz
uid = "system"; Z?ZiK1) K
pwd = "manager"; P MV;A{T
Class.forName(className); Xn@\p5<
Connection cn = DriverManager.getConnection(url,uid,pwd); hLK5s1#K
2)用jndi(java的命名和目录服务)方式 0}tf*M+a
例子 2.)xWCG
String jndi = "jdbc/db"; VRV*\*~$
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); 3M\~#>
DataSource ds = (DataSource) ctx.lookup(jndi); @TBcVHy
Connection cn = ds.getConnection(); # bc$[%_
多用于jsp中 W5z<+8R
2、执行sql语句 /
VypN,
1)用Statement来执行sql语句 t.Q}V5t{g
String sql; {Rc mjI7
Statement sm = cn.createStatement(); o
b;]
sm.executeQuery(sql); // 执行数据查询语句(select) xV w9_il2a
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); 5#|D1A
2)用PreparedStatement来执行sql语句 X$Eg(^L a
String sql; cLhHGwX=x
sql = "insert into user (id,name) values (?,?)"; u5zL;C3O
PreparedStatement ps = cn.prepareStatement(sql); %Z_/MNI
ps.setInt(1,xxx); <q\OREMsq
ps.setString(2,xxx); 69/aP=
... HEh,Cf7`'
ResultSet rs = ps.executeQuery(); // 查询 Se~<Vpo
int c = ps.executeUpdate(); // 更新 Ck.LsL-
WRrCrXP
3、处理执行结果 s2F<H#
查询语句,返回记录集ResultSet }.*"ezaZw
更新语句,返回数字,表示该更新影响的记录数 Jy<hTd*q
ResultSet的方法 oHh~!#u
1、next(),将游标往后移动一行,如果成功返回true;否则返回false 11Sflj
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 m03D+@F
JV_VF'
4、释放连接 @N+ }cej
cn.close(); NN>E1d=
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection rG[iEY
VS`
tj
可滚动、更新的记录集 '^mCLfo0}
1、创建可滚动、更新的Statement 9|BH/&$
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); d ? Uj3G
该Statement取得的ResultSet就是可滚动的 $mgamWNE8w
2、创建PreparedStatement时指定参数 5\!t!FL_
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); n1!hfu7@s
ResultSet.absolute(9000); NSs"I]
批量更新 D/U=zDpiB
1、Statement q~:H>;:G-
Statement sm = cn.createStatement(); zP554Gr ?
sm.addBatch(sql1); im,H|u_f4
sm.addBatch(sql2); n$Nb,/o
... 9d kuvk}:
sm.executeBatch() <e&88{jJ
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 ''D\E6c\
2、PreparedStatement yBKEw(1
PreparedStatement ps = cn.preparedStatement(sql); s|HpN
{ ~V34j:
ps.setXXX(1,xxx); _L8|ZV./
... "2'4b
ps.addBatch(); IhR;YM[K
} pzr\<U`
ps.executeBatch(); '0b!lVe
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 n <,:;0{
<DeC^[-P
事务的处理 3 bK.8
1、关闭Connection的自动提交 [pY1\$,
cn.setAutoCommit(false); dMd2a4
2、执行一系列sql语句 b6(LoN.
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close h95a61a,Vy
Statement sm ; W0-KFo.'
sm = cn.createStatement(insert into user...); 1 sJtkge:
sm.executeUpdate(); wmV7g7t6
sm.close(); O~P1d&:L
sm = cn.createStatement("insert into corp...); xxy
(#j$
sm.executeUpdate(); b?^CnMO
sm.close(); CU`yi.)T{
3、提交 ]9A@iA
cn.commit(); SHow~wxw
4、如果发生异常,那么回滚 vQH6CB"
cn.rollback();