java 数据库基本操作 mFSw@CC
1、java数据库操作基本流程 tX@_fYb
2、几个常用的重要技巧: d8m6B6
CW
可滚动、更新的记录集
l"!Ko G7
批量更新 z%e8K(
事务处理 )E,\H@A
_`I"0.B]
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 W ]Nv33i
[
1、取得数据库连接 rN%F)
q#
1)用DriverManager取数据库连接 baP^<w^
例子 AN24Sf'`
String className,url,uid,pwd; fuA&7gNC
className = "oracle.jdbc.driver.OracleDriver"; B"v.*
%"&/
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; E6,4RuCK
uid = "system"; &CIVL#];e
pwd = "manager"; ~,BIf+\XF
Class.forName(className); n#:N;T;\a
Connection cn = DriverManager.getConnection(url,uid,pwd); 5e}A@GyC
2)用jndi(java的命名和目录服务)方式 .'rW.'Ft
例子 dpFVN[\oK
String jndi = "jdbc/db"; }Y*VAnY6;
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); ]\xy\\b/`
DataSource ds = (DataSource) ctx.lookup(jndi); OI?K/rn
Connection cn = ds.getConnection(); A5H3%o(6k
多用于jsp中 9!Ar`Io2@
2、执行sql语句 9{$<0,?
1)用Statement来执行sql语句 hTEx]# (
String sql; ^kgBa2 7
Statement sm = cn.createStatement(); r} P<iX
sm.executeQuery(sql); // 执行数据查询语句(select) +Ag!?T
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); 8-lOB
2)用PreparedStatement来执行sql语句 \|U l]1pO8
String sql; s-RQMK}H
sql = "insert into user (id,name) values (?,?)"; #."Hh<C
PreparedStatement ps = cn.prepareStatement(sql); (C\hVy2X?N
ps.setInt(1,xxx); mCWhUBghR
ps.setString(2,xxx); "n: %E
... 581e+iC~<H
ResultSet rs = ps.executeQuery(); // 查询 UTSL
int c = ps.executeUpdate(); // 更新 E%'~'[Q
w~;I7:
3、处理执行结果 2<][%> '
查询语句,返回记录集ResultSet vNeCpf
更新语句,返回数字,表示该更新影响的记录数 W?We6.%
ResultSet的方法 `$~RxzZ g
1、next(),将游标往后移动一行,如果成功返回true;否则返回false <d<mvXbw_@
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 Z1h]
hxf'5uc
4、释放连接 I0'[!kBF|
cn.close(); [ G
e=kFB
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection [Cb`{
90#
;?#
可滚动、更新的记录集 D!oc>K$B
1、创建可滚动、更新的Statement &%2*Wu;
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); Qf|U0
该Statement取得的ResultSet就是可滚动的 ~-#yOu
,w
2、创建PreparedStatement时指定参数 /Ux*u#
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); X/;p-KX
ResultSet.absolute(9000);
sjM;s{gy
批量更新 "iM~Hy
1、Statement VN'Wq7>6
Statement sm = cn.createStatement(); WnHUE
sm.addBatch(sql1); 2qHf'
sm.addBatch(sql2); +@Ad1fJi
... `Bw9O%]-S
sm.executeBatch() $v`afd y
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 teW6;O_
2、PreparedStatement CAU0)=M
PreparedStatement ps = cn.preparedStatement(sql); `' 153M]
{ 6ATtW+sN ]
ps.setXXX(1,xxx); /oL;YIoQX
... MzYavg`
ps.addBatch(); 7JDN{!jT
} S|zW^|YU
ps.executeBatch(); ]O
TH"*j
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 3^StIw{X
n q19Q)
事务的处理 GI7=xh
1、关闭Connection的自动提交 c DrebU
cn.setAutoCommit(false); erl:9.
2、执行一系列sql语句 vMs;>lhtg
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close phYDs9-K
Statement sm ; $ C0TD7=
sm = cn.createStatement(insert into user...); O3N_\B:
sm.executeUpdate(); oW$s
xS
sm.close(); \]Dt4o*yZ
sm = cn.createStatement("insert into corp...); RkuuogZ
sm.executeUpdate(); U{ ;l0 2S
sm.close(); Ao7 `G':
3、提交 MqKye8h9f
cn.commit(); ir:d'g1k
4、如果发生异常,那么回滚 k]rLjcB
cn.rollback();