java 数据库基本操作 K\,)9:`t
1、java数据库操作基本流程 l _dWS9
2、几个常用的重要技巧: ;mjk`6p
可滚动、更新的记录集 es6!p 7p?
批量更新 'W@X139zq
事务处理 jL<:N
8
9B{,q6
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 bd5\Rt
1、取得数据库连接 `gDpb.=Y
1)用DriverManager取数据库连接 C-V,3}=*2
例子 kD8$ir'UYG
String className,url,uid,pwd; xVfAlN37(
className = "oracle.jdbc.driver.OracleDriver"; @/9#Z4&d0
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; =e$<["
uid = "system"; 0r*E$|zZ
pwd = "manager"; |k\4\aLj
Class.forName(className); 04D>h0yFf
Connection cn = DriverManager.getConnection(url,uid,pwd); )+OI}
2)用jndi(java的命名和目录服务)方式 ;}@.E@s%'
例子 nQy.?*X
String jndi = "jdbc/db";
=8?y$WE
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); iVTC"v
DataSource ds = (DataSource) ctx.lookup(jndi); ZX'q-JUv f
Connection cn = ds.getConnection(); A<fKO <d
多用于jsp中 ZVs]_`(+
2、执行sql语句 o$;t
1)用Statement来执行sql语句 sEkfmB2J/
String sql; %UT5KYd!=N
Statement sm = cn.createStatement(); -d1 YG[1|
sm.executeQuery(sql); // 执行数据查询语句(select) z6)b XL[f
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); x=DxD&I!J
2)用PreparedStatement来执行sql语句 K#OL/2^
5
String sql; h@
lz
sql = "insert into user (id,name) values (?,?)"; kY]"3a
PreparedStatement ps = cn.prepareStatement(sql); Mq0MtC6-
ps.setInt(1,xxx); :E")Zw&sW3
ps.setString(2,xxx); :rb;*nY!
... sC3Vj(d!i
ResultSet rs = ps.executeQuery(); // 查询 w9|x{B
int c = ps.executeUpdate(); // 更新 }b1G21Dc!
T1Py6Q,-
3、处理执行结果 _HwA%=>7
查询语句,返回记录集ResultSet IHEbT
更新语句,返回数字,表示该更新影响的记录数 #L.,aTA<
ResultSet的方法 (G|!{
1、next(),将游标往后移动一行,如果成功返回true;否则返回false _[[0rn$
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 m7k }k)
UBL{3s^"
4、释放连接 $OZ= L
cn.close(); h7Uj "qH
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection iy~h|YK;
sK#)k\w>
可滚动、更新的记录集 Zu"qTJE/1
1、创建可滚动、更新的Statement WOn53|GQK
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); {F<0e^*
该Statement取得的ResultSet就是可滚动的 WaB0?jI
2、创建PreparedStatement时指定参数 HO<|EH~lu
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); |:C0_`M9
ResultSet.absolute(9000); uGZGI;9f4
批量更新 ]$2 yV&V