java 数据库基本操作 p4)Q&k!
1、java数据库操作基本流程 .p$(ZH =~
2、几个常用的重要技巧: S[QrS7
可滚动、更新的记录集 E)3NxmM#
批量更新 )}ROLe
事务处理 (iGTACoF
B?wq=DoG
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 zMJT:7*`|
1、取得数据库连接 Wez5N
1)用DriverManager取数据库连接 Q=:|R3U/
例子 BORA(,
String className,url,uid,pwd; LHmZxi?
className = "oracle.jdbc.driver.OracleDriver"; .8|X
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; C.QO#b
uid = "system"; ~;] d"'
pwd = "manager"; 9ll~~zF99|
Class.forName(className); "ITIhnE
Connection cn = DriverManager.getConnection(url,uid,pwd); zn(PI3+]!
2)用jndi(java的命名和目录服务)方式 Ct|A:/z(
例子 k_R"CKd
String jndi = "jdbc/db"; `,0}ZzaV&
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); tI{_y
DataSource ds = (DataSource) ctx.lookup(jndi); @lt#Nz
Connection cn = ds.getConnection(); 1nOCQ\$l
多用于jsp中 bN88ua}k{
2、执行sql语句 |Ds=)S"
K
1)用Statement来执行sql语句 L4f3X~8,b
String sql; 9C i-v/M]
Statement sm = cn.createStatement(); cGD(.=
sm.executeQuery(sql); // 执行数据查询语句(select) BPHW}F]X
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); yppo6HGD
2)用PreparedStatement来执行sql语句 D3A/l
String sql; 5M_H
NWi4
sql = "insert into user (id,name) values (?,?)"; p<;0g9,1
PreparedStatement ps = cn.prepareStatement(sql); ,Lt[\_
ps.setInt(1,xxx); 39jG8zr=Z[
ps.setString(2,xxx); TB^$1C
... w*MpX
U<
ResultSet rs = ps.executeQuery(); // 查询 wdZ/Xp9]
int c = ps.executeUpdate(); // 更新 t0I{q0
=rK+eG#,
3、处理执行结果 }d }lR
查询语句,返回记录集ResultSet 8.~kK<)!
更新语句,返回数字,表示该更新影响的记录数 E~:x(5'%d
ResultSet的方法 jA/w|\d!
1、next(),将游标往后移动一行,如果成功返回true;否则返回false D,ln)["xm
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 C8 \^#5
TOAAQ
4、释放连接 6`-jPR
cn.close(); ,?XCyHSgWW
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection bYPK h
c0fo7|
可滚动、更新的记录集 I2^8pTLh
1、创建可滚动、更新的Statement <^uBoKB/f
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); 3D(0=$W
该Statement取得的ResultSet就是可滚动的 <Ok3FE.K
2、创建PreparedStatement时指定参数 o8vug$=Z
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); IqGdfL6[(
ResultSet.absolute(9000); 4H<lm*!^
批量更新 ?0,Ngrbe
1、Statement dq[xwRU1
Statement sm = cn.createStatement(); a@*\o+Su
sm.addBatch(sql1); DFTyMB1H
sm.addBatch(sql2); \^%}M!tan
... <