java 数据库基本操作 *n h.&Mv|
1、java数据库操作基本流程 Y"&1jud4xl
2、几个常用的重要技巧: t*'U|K4L/
可滚动、更新的记录集 Ei[>%Ah
批量更新 8bIwRVA2\
事务处理 +P. }<
ayvHS&h
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 6$|!_94>*)
1、取得数据库连接 %+,7=Wt-
1)用DriverManager取数据库连接 &=d0'3k>
例子 ^7
oX Ju=
String className,url,uid,pwd; &0*=F%Fd
className = "oracle.jdbc.driver.OracleDriver"; +`)4jx)r/
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; >^fkHbgNQ
uid = "system"; eQvdi|6
pwd = "manager"; $yA2c^QS
Class.forName(className); ^Gs=U[**
Connection cn = DriverManager.getConnection(url,uid,pwd); .:)nG(7f<
2)用jndi(java的命名和目录服务)方式 ') -Rv]xe
例子 )+ss)LEC
String jndi = "jdbc/db"; vtS[Tkk|A
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); Os# V=P
DataSource ds = (DataSource) ctx.lookup(jndi); J_=42aHO
Connection cn = ds.getConnection(); M)1?$'Aq
多用于jsp中 T8ftBIOi
2、执行sql语句 ^5yFb=2
1)用Statement来执行sql语句 Px<*n '~}
String sql; zz1e)W/
Statement sm = cn.createStatement(); ]VU a$$
sm.executeQuery(sql); // 执行数据查询语句(select) g,N"o72)
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); IfdgMELk
2)用PreparedStatement来执行sql语句 MSw:Ay[9
String sql; i$ :\,
sql = "insert into user (id,name) values (?,?)"; f4TNy^-
PreparedStatement ps = cn.prepareStatement(sql); b\l +S2
ps.setInt(1,xxx); `Ko6;s#
ps.setString(2,xxx); rcWr0q
... Jm l4EW7
ResultSet rs = ps.executeQuery(); // 查询 (\=iKE4#
int c = ps.executeUpdate(); // 更新 OYsG#
v)a$;P%
3、处理执行结果 },G>+ s8h
查询语句,返回记录集ResultSet qd7 86~
更新语句,返回数字,表示该更新影响的记录数 $Jt+>.44
ResultSet的方法 X_0Ta_u?T
1、next(),将游标往后移动一行,如果成功返回true;否则返回false 9<ev]XaSl
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 rprtp5C g
xxN=,p
4、释放连接 wwtk6;8@
cn.close(); mz~aSbb|
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection i9FHEu_
0WjPo
可滚动、更新的记录集 m:1f7Z>
1、创建可滚动、更新的Statement ??!+2G#%!
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); ' N@1+v=
该Statement取得的ResultSet就是可滚动的 ] hxE^/8 7
2、创建PreparedStatement时指定参数 (KF=v31_m
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); ?u`TX_OsB
ResultSet.absolute(9000); I C6}s
批量更新 ;
iK9'u
1、Statement &!lGx7zf
Statement sm = cn.createStatement(); D6KYkN(,v
sm.addBatch(sql1); Gg3cY{7
sm.addBatch(sql2); 6] ~g*]T
... O#e' .n!rI
sm.executeBatch() BWbM$@'x
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 wlM"Zt
2、PreparedStatement 'NJCU.lKm
PreparedStatement ps = cn.preparedStatement(sql); 5+gSpg]i
{ YRy5.F%?
ps.setXXX(1,xxx); Q@in?};
... 1Ue;hu'q:
ps.addBatch(); V*m@Rs!)2
} G@O~*k1v
ps.executeBatch(); <L1;aNN
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 0pSqk/
|G5Me
事务的处理 %b
H1We
1、关闭Connection的自动提交 KKz{a{ePY%
cn.setAutoCommit(false); j5,vSh~q;'
2、执行一系列sql语句 AC$:.KLI
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close q5irKT*Hs
Statement sm ; wi]F\ q"Y^
sm = cn.createStatement(insert into user...); :CQ-?mT^LA
sm.executeUpdate(); EMDsi2
sm.close(); /idQfff
sm = cn.createStatement("insert into corp...); ="$9
<wt
sm.executeUpdate(); 2\Vzfca
sm.close(); jORU+g
3、提交 Z>)(yi9+
cn.commit(); 5s >UM@})
4、如果发生异常,那么回滚 [ET03 nZ
cn.rollback();