java 数据库基本操作 J4!Om&\@
1、java数据库操作基本流程 L}lOA,EF
2、几个常用的重要技巧: =FQ]eb*
可滚动、更新的记录集 ,2S w6u
批量更新 j+NOT`&
事务处理 ((F[]<?
U`sybtuBP'
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 VU`aH9g3(
1、取得数据库连接 ykc$B5*
1)用DriverManager取数据库连接 yg\bCvL&
例子 =7pLU+ u
String className,url,uid,pwd; FI{9k(
className = "oracle.jdbc.driver.OracleDriver"; Z5[TmVU
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; <&E3QeK
uid = "system"; I)I,{xT4
pwd = "manager"; i&\N_PUm[
Class.forName(className); 5fuOl-M0W
Connection cn = DriverManager.getConnection(url,uid,pwd); ;*ebq'D([
2)用jndi(java的命名和目录服务)方式 /M(FuV
例子 ORk8^0\
String jndi = "jdbc/db"; p>7!"RF:U
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); *#{[9d
DataSource ds = (DataSource) ctx.lookup(jndi); CJ0j2e/
Connection cn = ds.getConnection(); 67Rsd2
多用于jsp中 n_vopDMm
2、执行sql语句 2
>G"A
1)用Statement来执行sql语句 ycB>gd
String sql; [ah%>&u
Statement sm = cn.createStatement(); HV ab14}E
sm.executeQuery(sql); // 执行数据查询语句(select) ' p,QI>
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); 'aMT^w4if)
2)用PreparedStatement来执行sql语句 I@~hz%'
String sql; s,>1n0a
sql = "insert into user (id,name) values (?,?)"; Z'p7I}-qr
PreparedStatement ps = cn.prepareStatement(sql); }
<; y,4f
ps.setInt(1,xxx); ,9Y{x
ps.setString(2,xxx); *kE2d{h^=C
... 7@al)G;~
ResultSet rs = ps.executeQuery(); // 查询 MFO}E!9`q
int c = ps.executeUpdate(); // 更新 &o*/6X
Vvu+gP'z.
3、处理执行结果 A7SBm`XJ)p
查询语句,返回记录集ResultSet 1V(tt{
更新语句,返回数字,表示该更新影响的记录数 ;=.VKW%U
ResultSet的方法 E&r*[;$
1、next(),将游标往后移动一行,如果成功返回true;否则返回false {FyGh
*/
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 ](c[D9I!8
SOQm>\U'i
4、释放连接 8 St`,Tq)
cn.close(); <_&tP=h
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection 'PTWC.C?9
.OA_)J7
可滚动、更新的记录集 xB"o
7,
1、创建可滚动、更新的Statement k @'85A`
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); Ym6zNb8
bQ
该Statement取得的ResultSet就是可滚动的 B]oIFLED
2、创建PreparedStatement时指定参数 gn"_()8cT
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); S?*pCJ0
ResultSet.absolute(9000); i)=!U>B_0
批量更新 >J>4g;Y
1、Statement wjYwQ= y5
Statement sm = cn.createStatement(); 6?OH"!b2-}
sm.addBatch(sql1); !Ziq^o.
sm.addBatch(sql2); 'V=w?G
5
... 2}:scag
sm.executeBatch() pJ[7m
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 (5Q,d [B
2、PreparedStatement |mvy@hm
PreparedStatement ps = cn.preparedStatement(sql); Q)x`'[3"7W
{ ^pA|ubZ
ps.setXXX(1,xxx); TUzpln
... vy\;#X!
ps.addBatch(); [P`t8
} 3l"7 $B
ps.executeBatch(); A8Q1x/d(
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 J2H/z5YRJ4
)P>Cxzs
事务的处理 I4
dS,h
1、关闭Connection的自动提交 bJ8G5QU
cn.setAutoCommit(false); O.4ty)*
2、执行一系列sql语句 (m|w&oA/
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close SAswP
Statement sm ; xh
Sp<|X_
sm = cn.createStatement(insert into user...); vG9A'R'P
sm.executeUpdate(); ,W"Q)cL
sm.close(); uTY5.8
sm = cn.createStatement("insert into corp...); Y%OE1F$6NN
sm.executeUpdate(); TGx:#x*k
sm.close(); |pk1pV |
3、提交 D(6d#c
cn.commit(); QU0K'4Yx5j
4、如果发生异常,那么回滚 :=x-b3U
cn.rollback();