java 数据库基本操作 JKp@fQT *
1、java数据库操作基本流程 T|oDJ]\J
2、几个常用的重要技巧: biV|W@JM
可滚动、更新的记录集 #Sg/
批量更新 FDFVhcr
事务处理 ss|n7
)"P.n-aF
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 Tnf&32IA
1、取得数据库连接 wN0?~
1)用DriverManager取数据库连接 kz#x6NXj
例子 e6gj'GmY
String className,url,uid,pwd; 9p02K@wkD
className = "oracle.jdbc.driver.OracleDriver"; A1zV5-E/
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; o'P[uB/
uid = "system"; *"/BD=INv}
pwd = "manager"; 9<!??'@f
Class.forName(className); m`XaY J
Connection cn = DriverManager.getConnection(url,uid,pwd); S +73 /Vs
2)用jndi(java的命名和目录服务)方式 bw#\"uJ
例子 }LIf]YK
String jndi = "jdbc/db"; 9%P$e=Ui#
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); odcrP\S
DataSource ds = (DataSource) ctx.lookup(jndi); jP3 ~O
Connection cn = ds.getConnection(); n
n8N 9w
多用于jsp中 L<<v
2、执行sql语句 N9Fu
1)用Statement来执行sql语句 HwMe^e;
String sql; |])Ko08*tE
Statement sm = cn.createStatement(); 7V\M)r{q7
sm.executeQuery(sql); // 执行数据查询语句(select) r_a1oO:
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); \gZjq]3
2)用PreparedStatement来执行sql语句 $U_1e'
String sql; H:1F=$0I9
sql = "insert into user (id,name) values (?,?)"; %s%e5hU
PreparedStatement ps = cn.prepareStatement(sql); QmPHf*w[
ps.setInt(1,xxx); TlQ5'0&I
ps.setString(2,xxx); Tkf4`Gxd
... %%O_:@9x,
ResultSet rs = ps.executeQuery(); // 查询 c$hoqi |tD
int c = ps.executeUpdate(); // 更新 y3V47J2o
t&bE/i_T
3、处理执行结果 #0qMYe>Y
查询语句,返回记录集ResultSet exm*p/
更新语句,返回数字,表示该更新影响的记录数 R&R{I/;i*.
ResultSet的方法 W9SEYkg
1、next(),将游标往后移动一行,如果成功返回true;否则返回false
C%Op[H3
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 DGAg#jh
ORV'dr
4、释放连接 37,)/8]lG
cn.close(); /z,+W9`
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection M^A;tPw
##NowO
可滚动、更新的记录集 @)@hzXQ
1、创建可滚动、更新的Statement !. ={p8X-x
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); CH h6Mnw
该Statement取得的ResultSet就是可滚动的 !3at(+4
2、创建PreparedStatement时指定参数 dNs<`2m
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); b(g?X
(&
ResultSet.absolute(9000); OEN'c0;5
批量更新 Zf`ddT
1、Statement j~9,Ct
Statement sm = cn.createStatement(); 0.t1p(x;
sm.addBatch(sql1); W&