java 数据库基本操作 3a#!^G!~
1、java数据库操作基本流程 WxXVL"
2、几个常用的重要技巧: i.fDH57
可滚动、更新的记录集 se)I2T{J
批量更新 4&&j7$aV
事务处理 EIF[e|kZ<
oxad}Y
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 m:"2I&0)WM
1、取得数据库连接 JG4&eK$-
1)用DriverManager取数据库连接 $~`(!pa:
例子 Mz"kaO
String className,url,uid,pwd; esLY1c%"/
className = "oracle.jdbc.driver.OracleDriver"; m\~[^H~g
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; #b8/gRfS
uid = "system"; t@4vEKw?.X
pwd = "manager"; E8-p
,e,
Class.forName(className); "#m*`n
Connection cn = DriverManager.getConnection(url,uid,pwd); %/>_o{"hw
2)用jndi(java的命名和目录服务)方式 ^Xb!dnT.*a
例子 JP@UvDE|
String jndi = "jdbc/db"; I#A`fJ
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); j+Tk|GRab
DataSource ds = (DataSource) ctx.lookup(jndi); C8{CKrVE
Connection cn = ds.getConnection(); RF6|zCWuI
多用于jsp中 Dxu)by
2、执行sql语句 -><_J4
1)用Statement来执行sql语句 &7<~Q\XZbI
String sql; 7tr.&A^c
Statement sm = cn.createStatement(); ||_F
/AD
sm.executeQuery(sql); // 执行数据查询语句(select) w{UU(
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); (m,O!935f
2)用PreparedStatement来执行sql语句 A"P1B]
String sql; q?t>!1c
sql = "insert into user (id,name) values (?,?)"; 6zNN 8
PreparedStatement ps = cn.prepareStatement(sql); z&-`<uV~
ps.setInt(1,xxx); h?CNChRJs
ps.setString(2,xxx); t8^*s<O
... 0\gE^=o[
ResultSet rs = ps.executeQuery(); // 查询 w$t2Hd
int c = ps.executeUpdate(); // 更新 }Rf }
iG
'7=*n_l
3、处理执行结果 $23R%8j
查询语句,返回记录集ResultSet Y<M}'t
更新语句,返回数字,表示该更新影响的记录数 %EVg.k$
ResultSet的方法 =+"XV8Fi,
1、next(),将游标往后移动一行,如果成功返回true;否则返回false ](0A/,#q6
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 S@*@*>s^
g6*}&.&
4、释放连接 hpw;w}m
cn.close(); Dic(G[
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection E]7G4
/_56H?w\
可滚动、更新的记录集 R'80 {
1、创建可滚动、更新的Statement JUXK}0d%eN
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); o= 8yp2vG
该Statement取得的ResultSet就是可滚动的 4<O[d
2、创建PreparedStatement时指定参数 3g6R<Ez
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); %_3{Db`R>
ResultSet.absolute(9000); Lh. L~M1X
批量更新 "iKK&%W
1、Statement CP?\'a"Kt
Statement sm = cn.createStatement(); m.4y=69 &
sm.addBatch(sql1); ()SG
sm.addBatch(sql2); /evh .S
... 6: M
sm.executeBatch() Dbtw>:=
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 p~e6ah?1
2、PreparedStatement Z2LG/R
PreparedStatement ps = cn.preparedStatement(sql); 8.A ;
I<
{ \K)q$E<!
ps.setXXX(1,xxx); v/m6(z
... ,Wdyg8&.
ps.addBatch(); nH_A`m3%/
} +q2l,{|?
ps.executeBatch(); <Z0Tz6/j,
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 fj"S|]e
V8N<%/A=
事务的处理 ]#J]f
1、关闭Connection的自动提交 ao,LP,_
cn.setAutoCommit(false); */qv}
2、执行一系列sql语句 +6TKk~0e^
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close 5\a5^FK~
Statement sm ; Cvl"")ZZ`
sm = cn.createStatement(insert into user...); 3Zbvf^
sm.executeUpdate(); E@N_~1
sm.close(); V&f3>#n\
sm = cn.createStatement("insert into corp...); sB"]R%`_
sm.executeUpdate(); Fs=nAn#
sm.close(); IYj-cm
3、提交 [`
i;gx[^
cn.commit(); 4e5Ka{# <
4、如果发生异常,那么回滚 00$W>Gr
cn.rollback();