java 数据库基本操作 (&!NC[n,
1、java数据库操作基本流程 up'Tit
2、几个常用的重要技巧: K# Jk _"W
可滚动、更新的记录集 4fe7U=# ;Y
批量更新 9]e V?yoA8
事务处理 /z}~zO
clk[ /'1
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 mW:!M!kk
1、取得数据库连接 %*\es7m}
1)用DriverManager取数据库连接 ;$z$@@WC
例子 og0*Nt+
String className,url,uid,pwd; lEV]4
t_H
className = "oracle.jdbc.driver.OracleDriver"; v$N|"o""
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; SCz(5[MZJ
uid = "system"; {Lm~r+
U
pwd = "manager"; &o<F7U'R
Class.forName(className); _%GGl$kH
Connection cn = DriverManager.getConnection(url,uid,pwd); 3"P }n
2)用jndi(java的命名和目录服务)方式 `(3/$%
例子 HcqfB NM
String jndi = "jdbc/db"; +-G<c6 |
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); _vZ"4L+Iw+
DataSource ds = (DataSource) ctx.lookup(jndi); L@gWzC~?Q
Connection cn = ds.getConnection(); q=#}
yEG
多用于jsp中 !=N"vD*
2、执行sql语句 *f?4
1)用Statement来执行sql语句 N"3b{Qio
String sql; mL4] l(U
Statement sm = cn.createStatement(); ]Oif|k`{
sm.executeQuery(sql); // 执行数据查询语句(select) +Xemf?
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); 'z[Sp~I\
2)用PreparedStatement来执行sql语句 o";Z$tAJkC
String sql; >hr{JJe
sql = "insert into user (id,name) values (?,?)"; m o:D9
PreparedStatement ps = cn.prepareStatement(sql); cra+T+|>Kc
ps.setInt(1,xxx); $k2*[sn,
ps.setString(2,xxx); X#e1KZ
... *q1% IJ
ResultSet rs = ps.executeQuery(); // 查询 1u6^z
int c = ps.executeUpdate(); // 更新 qu-/"w<3$
+9")KQT
3、处理执行结果 <-u8~N@43W
查询语句,返回记录集ResultSet QV&D l_
更新语句,返回数字,表示该更新影响的记录数 dS<C@(
ResultSet的方法 xa
pq*oj
1、next(),将游标往后移动一行,如果成功返回true;否则返回false >mjNmh7
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 Zib)P &
Ba/Yl
4、释放连接
EMfdBY5
cn.close(); !H}vu]R
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection afb+GA!
J;f!!<l\
可滚动、更新的记录集 uECsh2Uin
1、创建可滚动、更新的Statement #jxe%2'Ot
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); H
`(exa:w
该Statement取得的ResultSet就是可滚动的 zBe8,, e
2、创建PreparedStatement时指定参数 1)[]x9]^q'
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); %C=]1Q=T)
ResultSet.absolute(9000); =%>oR
批量更新 *7wAkljP
1、Statement I;1lX
L
Statement sm = cn.createStatement(); eR3$i)5
sm.addBatch(sql1); <E0UK^-}
sm.addBatch(sql2); m:/wG&
!
... _X'"w|0
sm.executeBatch() FTeu~<KpM
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 n2IV2^ "
2、PreparedStatement h`H,a7
PreparedStatement ps = cn.preparedStatement(sql); -G|G_$9
{ 3hK#'."`N
ps.setXXX(1,xxx); 4sP2g&