java 数据库基本操作 lG12Su/
1、java数据库操作基本流程 2:'C|
2、几个常用的重要技巧: (e sTb,
可滚动、更新的记录集 9 X}F{!p~1
批量更新 JF!?i6V
事务处理 ON#\W>MK?
z1[2.&9D-
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 zJJ
KLr;
1、取得数据库连接 P5/K?I~/So
1)用DriverManager取数据库连接 Bf!i(gM
例子 s$`g%H>
String className,url,uid,pwd; &}wrN(?w
className = "oracle.jdbc.driver.OracleDriver"; J.Mj76\_
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; >(5*y=\i
uid = "system"; E6a$c`H@?
pwd = "manager"; iL(rZT&^
Class.forName(className); 0Ci\(
Connection cn = DriverManager.getConnection(url,uid,pwd); Z&FC:4!!
2)用jndi(java的命名和目录服务)方式 g*C&Pr3
例子 :acnrW>i[@
String jndi = "jdbc/db"; +g,:!5pg
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); Gc2sY 0
DataSource ds = (DataSource) ctx.lookup(jndi);
S!Ue+jW
Connection cn = ds.getConnection(); ._@Scd
多用于jsp中 vWY}+#
2、执行sql语句 :q=u+h_
1)用Statement来执行sql语句 LX),oR
String sql; XH4!|wz
Statement sm = cn.createStatement(); `&$"oW{HW
sm.executeQuery(sql); // 执行数据查询语句(select) eq.K77El{J
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); 9,|{N(N<!
2)用PreparedStatement来执行sql语句 pOP`n3m0
String sql; UMR0S5`}
sql = "insert into user (id,name) values (?,?)"; >m='#x0>Y
PreparedStatement ps = cn.prepareStatement(sql); |_L\^T|6
ps.setInt(1,xxx); !xmvCH=2
ps.setString(2,xxx); +7n;Bsk
_
... `<&RZB2
ResultSet rs = ps.executeQuery(); // 查询 cPA-EH
int c = ps.executeUpdate(); // 更新 Pk/{~!+
$
NIufL
}6\
3、处理执行结果 &ywAzGV{s
查询语句,返回记录集ResultSet Nq'Cuwsp
更新语句,返回数字,表示该更新影响的记录数 D QO~<E6c
ResultSet的方法 )W9W8>Cc5_
1、next(),将游标往后移动一行,如果成功返回true;否则返回false @Ee{ GH^-
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 H59}d
oKH
: l>&5w;
4、释放连接 %UZ_wsY\
cn.close(); z}\TS.
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection 9bvz t8pc
#<df!)
可滚动、更新的记录集 {^>dQ+S x7
1、创建可滚动、更新的Statement C9zQ{G
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY);
O\y#|=d
该Statement取得的ResultSet就是可滚动的 :0G "EM4
2、创建PreparedStatement时指定参数 1}+lL)-!
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); 1A\Jh3;Q
ResultSet.absolute(9000);
i zJa`K
批量更新 mh`~1aEr
1、Statement Eukj2a
Statement sm = cn.createStatement(); )RA$E`!b
sm.addBatch(sql1); QX}O{LQR
sm.addBatch(sql2); v0euvs
... A41*4!L=
sm.executeBatch() OB"Ur-hJ0
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 -JOtvJIQI
2、PreparedStatement ,]HH%/h
PreparedStatement ps = cn.preparedStatement(sql); DM"nxTVre
{ >zcR ?PPs
ps.setXXX(1,xxx); {n9]ej^
... ;=\vm"I?
ps.addBatch(); LWgYGXWT"
} mU.(aLHW
ps.executeBatch(); iXt1{VP'K
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 J.'}R2gT1
dw{L,u`68
事务的处理 t\44 Pu%
1、关闭Connection的自动提交 &K2J$(.t
cn.setAutoCommit(false); .OFwGOL%
2、执行一系列sql语句 ,{wA%Oy,
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close uk%C:4T
Statement sm ; *Y!'3|T
sm = cn.createStatement(insert into user...); ;M{@|z[Nv
sm.executeUpdate(); j2O?]M
sm.close(); 9x;CJhX
sm = cn.createStatement("insert into corp...); !14aw9Q
sm.executeUpdate(); nXH U|5.I
sm.close(); Lc,`
3、提交 f9v%k'T[
cn.commit(); dIk/vg
4、如果发生异常,那么回滚 sOzmw^7
cn.rollback();