java 数据库基本操作 @<1T&X{Z!
1、java数据库操作基本流程
-,"eN}P^
2、几个常用的重要技巧: 5e'**tbKH
可滚动、更新的记录集 lb)i0`AN+
批量更新 ',Oc+jLR
事务处理 pAtxEaXh
FxX nX
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 i?F~]8
1、取得数据库连接 mndNkK5o
1)用DriverManager取数据库连接 H//,qxDc
例子 7ws[Rp8
String className,url,uid,pwd; ;p(Doy)i
className = "oracle.jdbc.driver.OracleDriver"; BLo=@C%w5
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; "L)?dlb6T
uid = "system"; W$R@Klz
pwd = "manager"; {f>e~o
Class.forName(className); ]"vpCL
Connection cn = DriverManager.getConnection(url,uid,pwd); x1`Jlzrp,
2)用jndi(java的命名和目录服务)方式 j+3=&PkA.]
例子 )5U7w
String jndi = "jdbc/db"; [4}U*\/>C
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); *_uGzGB&G
DataSource ds = (DataSource) ctx.lookup(jndi); `$VnB
Connection cn = ds.getConnection(); qS[nf>"
多用于jsp中 ,5|@vW2@u
2、执行sql语句 6)3pnhG9
1)用Statement来执行sql语句 |=Pw-uk
String sql; Xu[A,6
Statement sm = cn.createStatement(); o l+*Oe
sm.executeQuery(sql); // 执行数据查询语句(select) SM`n:{N(
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); .ffb*gZ4
2)用PreparedStatement来执行sql语句 W%}zwQ
String sql; Nu%MXu+
sql = "insert into user (id,name) values (?,?)"; sTYA
PreparedStatement ps = cn.prepareStatement(sql); qP[jtRIN
ps.setInt(1,xxx); L8KMMYh[
ps.setString(2,xxx); (M t-2+"+
... f@xjNm*'Z
ResultSet rs = ps.executeQuery(); // 查询 &m@DK>
int c = ps.executeUpdate(); // 更新 i"y @Aj!7
:AC( \
3、处理执行结果 !o`h*G-x
查询语句,返回记录集ResultSet `c_Wk]i
更新语句,返回数字,表示该更新影响的记录数 {X&H
ResultSet的方法 meyO=>
1、next(),将游标往后移动一行,如果成功返回true;否则返回false I6 Q{ Axy
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 &o)eRcwH`
WS ^%<
h#
4、释放连接 ohB@ij C!
cn.close(); SfwNNX%
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection ~$ "P\iJ
* @'N/W/8
可滚动、更新的记录集 R-Z)0S'ZR
1、创建可滚动、更新的Statement $)M5@KT
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); 7brC@+ZD
该Statement取得的ResultSet就是可滚动的 b,RQ" {
2、创建PreparedStatement时指定参数 P?YcZAJT*
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); kCU(Hi`Q
ResultSet.absolute(9000); <825?W|
批量更新 2xpI|+a%
1、Statement HY7#z2L
Statement sm = cn.createStatement(); b(:U]>J
sm.addBatch(sql1); WQYw@M~4Q!
sm.addBatch(sql2); fnU;DS]W
... #uH%J<U
sm.executeBatch() (wZ/I(4
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 4#wZ#}
2、PreparedStatement T
[2l32
PreparedStatement ps = cn.preparedStatement(sql); -|&&lxrwh
{ hxuc4C\J
ps.setXXX(1,xxx); MJI`1*(
... :0j_I\L
ps.addBatch(); kTs.ps8ei
} %8g1h)F"S
ps.executeBatch(); 7F wot&