java 数据库基本操作 Nf<mgOAT1
1、java数据库操作基本流程 BB694
2、几个常用的重要技巧: )E.!jL:g
可滚动、更新的记录集 7xIXFuu
批量更新 :mwJJIjUW
事务处理 n@)Kf
A)&
*+ql{\am4N
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 8AK=FX&@&
1、取得数据库连接 {T^"`%[
1)用DriverManager取数据库连接 ST#MCh-00
例子 `H.~#$
String className,url,uid,pwd; x"9e eB,
className = "oracle.jdbc.driver.OracleDriver"; mu[:b
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; Mbua!m(0
uid = "system"; +$-@8,F>
pwd = "manager"; ]b"Oy}ARW
Class.forName(className); em+dQ15
Connection cn = DriverManager.getConnection(url,uid,pwd); bV5 {
2)用jndi(java的命名和目录服务)方式 LK}Ih@f
例子 XvU^DEfW
String jndi = "jdbc/db"; Stkyz:,(
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); K\7\
DataSource ds = (DataSource) ctx.lookup(jndi); xV_,R'l
Connection cn = ds.getConnection(); Vy:I[@6@+
多用于jsp中 LX
[ _6
2、执行sql语句 *f[nge&.
1)用Statement来执行sql语句 7<<-\7`
String sql; F~`Yh6v
Statement sm = cn.createStatement(); F3XB};
sm.executeQuery(sql); // 执行数据查询语句(select) "B~c/%#PH
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); QUPZe~G>L
2)用PreparedStatement来执行sql语句 ^u?#fLr
String sql; (h}5*u%h
sql = "insert into user (id,name) values (?,?)"; ! z^%$;p
PreparedStatement ps = cn.prepareStatement(sql); ~$GRgOn
ps.setInt(1,xxx); x}Y
ps.setString(2,xxx); `OL@@`'^{S
... f4JmY1)@
ResultSet rs = ps.executeQuery(); // 查询 TY(B]Q_o
int c = ps.executeUpdate(); // 更新 M.|cl#
Rqi=AQ
3、处理执行结果 gn2*'_V~3
查询语句,返回记录集ResultSet $>PXX32
更新语句,返回数字,表示该更新影响的记录数 0zQ^ 6@
ResultSet的方法 81gcM?
1、next(),将游标往后移动一行,如果成功返回true;否则返回false B-oQ 9[~
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 P=.yXirm?
)w?DB@Tx
4、释放连接 {XHAQ9'
cn.close(); /s@t-gTi
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection 7$;#-l
n{d0}N=
可滚动、更新的记录集 lO
(MF
1、创建可滚动、更新的Statement BHVC&F*>
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); uPVM>xf>w
该Statement取得的ResultSet就是可滚动的 [y(DtOR
2、创建PreparedStatement时指定参数 #ujry.m
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); YXJr eM5
ResultSet.absolute(9000); 1V\tKDM
批量更新 <>n-+Kr
1、Statement |fL|tkGEa
Statement sm = cn.createStatement(); DFgQ1:6[
sm.addBatch(sql1); ~[_u@8l!mN
sm.addBatch(sql2); F@8G,$
... \#
p@ef
sm.executeBatch() s6q6)RD"
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 Kyf,<zF
2、PreparedStatement wMW."gM|
PreparedStatement ps = cn.preparedStatement(sql); )x!b{5'"7
{ X#ZQpo'h
ps.setXXX(1,xxx); hTEwp.
... "QKCZ8_C
ps.addBatch(); )j/2Z-Ev:W
} M_I.Y1|
ps.executeBatch(); fH@P&SX