java 数据库基本操作 [|`U6
8}u
1、java数据库操作基本流程 <oMUQ*OtV
2、几个常用的重要技巧: #b0{#^S:
可滚动、更新的记录集 8t"~Om5sG
批量更新 )wXuwdc[
事务处理 CR<`ZNuWz
v{x{=M]
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 7YWNd^FI
V
1、取得数据库连接 HHk)ZfWRo
1)用DriverManager取数据库连接 ni&*E~a
例子 6X
g]/FD
String className,url,uid,pwd; }*U[>Z-eO
className = "oracle.jdbc.driver.OracleDriver"; {[Q0qi =
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; @{
;XZb^
uid = "system"; :B*}^g
pwd = "manager"; OU DcY@x~
Class.forName(className); ^
?hA@{T/1
Connection cn = DriverManager.getConnection(url,uid,pwd); %%%fL;-y
2)用jndi(java的命名和目录服务)方式 Wk;5/
例子 Pj#'}ru!
String jndi = "jdbc/db"; *y[PNqyd
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); wYsZM/lw
DataSource ds = (DataSource) ctx.lookup(jndi); jMBiaX`F
Connection cn = ds.getConnection(); 5m$2Ku
多用于jsp中 i@"e,7mSG
2、执行sql语句 o;F" {RZ
1)用Statement来执行sql语句 a5'#j35
String sql; hm$X]H`uMX
Statement sm = cn.createStatement();
^{@!['
sm.executeQuery(sql); // 执行数据查询语句(select) U$&hZ_A
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); iGXI6`F"
2)用PreparedStatement来执行sql语句 `xS{0P{uj
String sql; m@Ev~~;
sql = "insert into user (id,name) values (?,?)"; $9
p!Y}
PreparedStatement ps = cn.prepareStatement(sql); 7J$b$P0}
ps.setInt(1,xxx); {0\,0*^p
ps.setString(2,xxx); _,h@:Xij
... =(AtfW^H
ResultSet rs = ps.executeQuery(); // 查询 n_K~vD
int c = ps.executeUpdate(); // 更新 V)o,1
\J^
3、处理执行结果 1,y&d}GW
查询语句,返回记录集ResultSet DLE8+NV8
更新语句,返回数字,表示该更新影响的记录数 vy@rQC %9
ResultSet的方法 g{s'GyV8t
1、next(),将游标往后移动一行,如果成功返回true;否则返回false e=P
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 JYqSL)Ta*t
nCg66-3A
4、释放连接 m,LG=s
cn.close(); lEL78l.
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection d=.2@Ry
3Q}$fQ&S
可滚动、更新的记录集 e>'H
IO
1、创建可滚动、更新的Statement ^u)z{.z'H/
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); qf'm=efRyu
该Statement取得的ResultSet就是可滚动的 5@osnf?
2、创建PreparedStatement时指定参数 {WN(&eax
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); -!qu"A:
ResultSet.absolute(9000); w6|9|f/
批量更新 XP[uF ;w
1、Statement Zzua17
Statement sm = cn.createStatement(); &6 -k#r
sm.addBatch(sql1); 4tA_YIv
sm.addBatch(sql2); !SOrCMHx
... eZhPu'id\s
sm.executeBatch() dP$GThGl
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 ?q2j3e[>
2、PreparedStatement oj.A,Fh
PreparedStatement ps = cn.preparedStatement(sql); x90*yaw>h
{ e`tLR- &
ps.setXXX(1,xxx); _K9VMczj
... QA!_} N4n
ps.addBatch(); s,VXc/
} |8_JY2
R
ps.executeBatch(); 84zTCX
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 %bXx!x8(
OY-w?'p?W
事务的处理 6+rlXmd
1、关闭Connection的自动提交 F^aR+m
cn.setAutoCommit(false); N8cAqr
2、执行一系列sql语句 5}ie]/[|
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close = iB,["s
Statement sm ; BI[JATZG
sm = cn.createStatement(insert into user...); ~i'Nqe_
sm.executeUpdate(); ;Z[]{SQ
sm.close(); 4wzlJ19E(
sm = cn.createStatement("insert into corp...); G%p~m%zIK
sm.executeUpdate(); wJb#g0
sm.close(); 2Tav;LKX
3、提交 pVp:@0h
cn.commit(); 5`/@N{e
4、如果发生异常,那么回滚 .@ C{3$,VG
cn.rollback();