java 数据库基本操作 V_JM@VN}Kk
1、java数据库操作基本流程 trL:qD+{(
2、几个常用的重要技巧: \M>}-j`v
可滚动、更新的记录集 3-4' x2
批量更新 o:u *E
事务处理 :Hdn&a
i
2x-67_BHY=
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 W]p)}#FR
1、取得数据库连接 0\f3L a
1)用DriverManager取数据库连接 r'7>J:cy=
例子 #Jt9U1WbF
String className,url,uid,pwd; @RW=(&<1
className = "oracle.jdbc.driver.OracleDriver"; E"7 iU
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; 5tMp@$F\{[
uid = "system"; vy?Zz<c;
pwd = "manager"; 6;g_}Zx
Class.forName(className);
zj.;O#hW
Connection cn = DriverManager.getConnection(url,uid,pwd); >]?!c5=
2)用jndi(java的命名和目录服务)方式 c`w YQUg(
例子 P#5&D*`}h
String jndi = "jdbc/db"; GaMiu!|,
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); 9$7tB
DataSource ds = (DataSource) ctx.lookup(jndi); HMT^gmF)
Connection cn = ds.getConnection(); 0q`n] NM
多用于jsp中 .du FMJl
2、执行sql语句 4J3cQ;z
1)用Statement来执行sql语句 X_Vj&{
String sql; W%@L7 xh
Statement sm = cn.createStatement(); $OK}jSH*v)
sm.executeQuery(sql); // 执行数据查询语句(select) %lsk>V
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); a=3?hVpB
2)用PreparedStatement来执行sql语句 c`
^I% i
String sql; J{"<Hgb
sql = "insert into user (id,name) values (?,?)"; YK Nz[x$|
PreparedStatement ps = cn.prepareStatement(sql); Z'EXq.hk
ps.setInt(1,xxx); d6ZJh xJ
ps.setString(2,xxx); L1;IXCc=
... 9$F '*{8
ResultSet rs = ps.executeQuery(); // 查询 g7G=ga
int c = ps.executeUpdate(); // 更新 )*_4=-8H
bd],fNgJ
3、处理执行结果 JR='c)6:
查询语句,返回记录集ResultSet hawE2k0p(
更新语句,返回数字,表示该更新影响的记录数 (orO=gST-/
ResultSet的方法 ~D1.opj3
1、next(),将游标往后移动一行,如果成功返回true;否则返回false L7i^?40
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 w.kb/
ln}2
4、释放连接 n~xh
%r;
cn.close(); NQCJ '%L6
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection `* !t<?$i
S7SD$+fX
可滚动、更新的记录集 -s
Iji)t
1、创建可滚动、更新的Statement pq0F!XmU
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); z Qtg]@S
该Statement取得的ResultSet就是可滚动的 :n36}VG|
2、创建PreparedStatement时指定参数 >% a^;gk(
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); Z3Le?cMt^
ResultSet.absolute(9000); |1vikG8
批量更新 _B4H"2}[Y
1、Statement {VOLUC o 4
Statement sm = cn.createStatement(); ZsjDe {TH
sm.addBatch(sql1); Zr`pOUk!4
sm.addBatch(sql2); 8jyg1NN D
... )LE SdX
sm.executeBatch() ~x`BV+R
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 (xnXM}M&2Y
2、PreparedStatement e-vwve
PreparedStatement ps = cn.preparedStatement(sql); tjw4.L<r
{ 9L+dN%C
ps.setXXX(1,xxx); &_cMbFLBP
... \
UCOe
ps.addBatch(); bL>J0LWQ
} k!Y7Rc{"
ps.executeBatch(); __Ei;%cV
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 #P8R
m4FT^^3yE
事务的处理 ~Xa8\>
1、关闭Connection的自动提交 "W:#4@
F
cn.setAutoCommit(false); #kD8U#
2、执行一系列sql语句 83io@*D
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close $J8?!Xg
Statement sm ; fz
H$`X'M
sm = cn.createStatement(insert into user...); S+LE ASOr
sm.executeUpdate(); 1^<R2x
sm.close(); We]mm3M3
sm = cn.createStatement("insert into corp...); NijvFT$V1
sm.executeUpdate(); .32]$vx
sm.close(); Nrp0z:
3、提交 ,[6N64fy
cn.commit(); no_(J>p^&
4、如果发生异常,那么回滚 #Fx$x#Gc@y
cn.rollback();