java 数据库基本操作 aEM#V
1、java数据库操作基本流程 <1LuYEDq
2、几个常用的重要技巧: Z\7bp&&
可滚动、更新的记录集 3}gK`1Nq1
批量更新 AN1bfF:C
事务处理 z`2d(KE?
``z="oD
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 0,3 ':Df
1、取得数据库连接 dk]ro~ [
1)用DriverManager取数据库连接 7> ]C2!
例子 ~
dk1fh
String className,url,uid,pwd; Ce)Wvuh
className = "oracle.jdbc.driver.OracleDriver"; H5%I?ZXw4
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; $ta#]>{
uid = "system"; :OZhEBL&b
pwd = "manager"; U{}7:&As
Class.forName(className); Z"^@B2v
Connection cn = DriverManager.getConnection(url,uid,pwd); yTvK)4&
2)用jndi(java的命名和目录服务)方式 YOoP]0'L
例子 1M{#"t{6
String jndi = "jdbc/db"; hWu)0t
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); 3gh^a;uC
DataSource ds = (DataSource) ctx.lookup(jndi); OlJj|?z$
Connection cn = ds.getConnection(); ]a%Kn]HI&2
多用于jsp中 K;ML'
2、执行sql语句 ;$/G T
1)用Statement来执行sql语句 ujh4cp
String sql; SYwNx">Bq
Statement sm = cn.createStatement(); ;(,Fe/wvC
sm.executeQuery(sql); // 执行数据查询语句(select) aRwBxf
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); xr2:bu
2)用PreparedStatement来执行sql语句 }<S2W\,G
String sql; #lC{R^SL
sql = "insert into user (id,name) values (?,?)"; e_;6UZ+
PreparedStatement ps = cn.prepareStatement(sql); igL^k`&5^"
ps.setInt(1,xxx); Lgfr"{C
ps.setString(2,xxx); srkOad
... <KA@A}
ResultSet rs = ps.executeQuery(); // 查询 u^uG_^^,/
int c = ps.executeUpdate(); // 更新 7(;VUR%%.
qTGy\i
3、处理执行结果 K\ ]r
查询语句,返回记录集ResultSet K7Vr$,p
更新语句,返回数字,表示该更新影响的记录数 LN^8U
ResultSet的方法 0A9cu,ZdUR
1、next(),将游标往后移动一行,如果成功返回true;否则返回false b#U%aPH
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 /km3L7L%R
*X-$*
~J0
4、释放连接 "F}Ip&]hAG
cn.close(); Oe!&Jma*>
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection gD\}CxtG
'W*F[U*&HP
可滚动、更新的记录集 rY= #^S
1、创建可滚动、更新的Statement 463dLEd
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); k}.nH"AQ
该Statement取得的ResultSet就是可滚动的 B=r/(e
2、创建PreparedStatement时指定参数 [ub\DLl
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); Qa%SvA@R
ResultSet.absolute(9000); (jG$M= q-
批量更新 jayoARUB
1、Statement :<gk~3\
Statement sm = cn.createStatement(); GZt] 38V)g
sm.addBatch(sql1); `ahXn
sm.addBatch(sql2); {;/o4[jlg
... )]R?v,9*D
sm.executeBatch() 9="sx 8?
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 6KG 63`aQ
2、PreparedStatement $C/Gn~k 5
PreparedStatement ps = cn.preparedStatement(sql); y|se^dn
{ Hdx|k=-Q^
ps.setXXX(1,xxx); (ce NVo&
... zJ`(LnV
ps.addBatch(); xW4+)F5P(
} A'8K^,<