java 数据库基本操作 VvS ^f
1、java数据库操作基本流程 X-mhz3Q&a
2、几个常用的重要技巧: Wu\szI"
可滚动、更新的记录集 <z2*T \B!8
批量更新 Kx@Papn|6
事务处理 !K0:0:
1~|o@CO
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 ;`(l)X+7
1、取得数据库连接 K9@F1ccQ/
1)用DriverManager取数据库连接 u\uY q
例子 KK|AXoBf
String className,url,uid,pwd; Cxt_QyL?
className = "oracle.jdbc.driver.OracleDriver"; bt2`elH|
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; ]a
,H!0i
uid = "system"; YR\pt8(z?
pwd = "manager"; \A ?B{*
Class.forName(className); #+<"`}]N
Connection cn = DriverManager.getConnection(url,uid,pwd); LKx<hl$O
2)用jndi(java的命名和目录服务)方式 T*'?;u
例子 Q^_*&},V
String jndi = "jdbc/db"; }r)T75_1
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); ux
7^PTgcO
DataSource ds = (DataSource) ctx.lookup(jndi); ,Zs"r}G^
Connection cn = ds.getConnection(); 1lf5xm.
多用于jsp中
6[{|'
2、执行sql语句 q!sazVaDp
1)用Statement来执行sql语句 Fhr5)Z
String sql; SCUsDr+.
Statement sm = cn.createStatement(); &E(KOfk#
sm.executeQuery(sql); // 执行数据查询语句(select) |hlc#t?
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); ];n3H~2
2)用PreparedStatement来执行sql语句 7[)IP:I>
String sql; R54wNm@
sql = "insert into user (id,name) values (?,?)";
Q9!T@
PreparedStatement ps = cn.prepareStatement(sql); T/b%,!N)
ps.setInt(1,xxx); x_yQoae
ps.setString(2,xxx); $^ wqoW%t
... "G+g(?N]j
ResultSet rs = ps.executeQuery(); // 查询 wVw?UN*rm;
int c = ps.executeUpdate(); // 更新 F"?OLV1B&
!MNnau%O
3、处理执行结果 Ew9\Y R}
查询语句,返回记录集ResultSet <EHgPlQn
更新语句,返回数字,表示该更新影响的记录数 Pm
Zb!|
ResultSet的方法 `wzb}"gLsM
1、next(),将游标往后移动一行,如果成功返回true;否则返回false x'c%w:
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 Y<"BhE
;B,6v P#
4、释放连接 n*Q~<`T
cn.close(); Q=+*OQV29
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection ROv(O;.Ty
+li<y`aw0
可滚动、更新的记录集 vs`"BQYf
1、创建可滚动、更新的Statement zlw+=NX
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); 3b#eB
该Statement取得的ResultSet就是可滚动的 i 1{Lx)
2、创建PreparedStatement时指定参数 vfn _Nq;
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); _3_kvs
ResultSet.absolute(9000); ^)| !nd
批量更新 ]V4Fm{]
1、Statement p;P"mp\'
Statement sm = cn.createStatement(); W'B=H1
sm.addBatch(sql1); AD** 4E
sm.addBatch(sql2); iFypKpHg~
... \bc ob8u
sm.executeBatch() ks}J
ke>
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 d5hYOhO[
2、PreparedStatement 6BnP"R.
PreparedStatement ps = cn.preparedStatement(sql); [#}0)
{ |6ZH+6[
ps.setXXX(1,xxx); N3Yf3rK
... [X"F}ph
ps.addBatch(); fH#*r|~
}
49gm=XPm
ps.executeBatch(); )C@O7m*.4
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 8~~*/oCoJt
9Ez>srH(
事务的处理 $P{|^ou3a#
1、关闭Connection的自动提交 =.sg$VX
cn.setAutoCommit(false); `~0^fSww
2、执行一系列sql语句 3t*e|Ih&j5
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close 1hz:AUH
Statement sm ; &"h 9Awn2
sm = cn.createStatement(insert into user...); g ss 3e&
sm.executeUpdate(); e?V7<7$
sm.close(); TVVr<r
sm = cn.createStatement("insert into corp...); ^iHwv*ss
sm.executeUpdate(); 9}=]oX!+V
sm.close(); ;F/yS2p
3、提交 5 }pn5iI
cn.commit(); ]I+"";oQGB
4、如果发生异常,那么回滚
d&@>P&AT
cn.rollback();