java 数据库基本操作 #%\0][Xf
1、java数据库操作基本流程 .{h"0<x
2、几个常用的重要技巧: z6C(?R
可滚动、更新的记录集 |cf-S8pwY
批量更新 TXmS$q
事务处理 d@$|zr6
kFWwz^x
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 {h7 vJ^
1、取得数据库连接 3W%6n-*u
1)用DriverManager取数据库连接 #@$80eFq
例子 *uhQP47B
String className,url,uid,pwd; ,UMr_ e{|
className = "oracle.jdbc.driver.OracleDriver"; I[Lg0H8
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; |(z{)yWbC[
uid = "system"; b4e~Z
pwd = "manager"; oCaYmi=:
Class.forName(className); &sWr)>vs
Connection cn = DriverManager.getConnection(url,uid,pwd); + U5Q/g
2)用jndi(java的命名和目录服务)方式 wW@e#:
例子 3!{imQT
String jndi = "jdbc/db"; oQ<[`.s
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); FN-/~Su~J
DataSource ds = (DataSource) ctx.lookup(jndi); MO8}i?u=z
Connection cn = ds.getConnection(); FOsd{Fw
多用于jsp中 #dWz,e3
2、执行sql语句 E]OexRJ^i
1)用Statement来执行sql语句 /'rj L<M
String sql; N| DI
k
Statement sm = cn.createStatement(); qY#*LqV
sm.executeQuery(sql); // 执行数据查询语句(select) Qh1pX}X
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); FBNLszT{L
2)用PreparedStatement来执行sql语句 9{jMO
String sql; SN}K=)KF#
sql = "insert into user (id,name) values (?,?)"; #c^]p/
PreparedStatement ps = cn.prepareStatement(sql); @(sz "
ps.setInt(1,xxx); <eG| `
ps.setString(2,xxx); 1_]X
... a|7C6#iz$
ResultSet rs = ps.executeQuery(); // 查询
/:4J
int c = ps.executeUpdate(); // 更新 L/tpT?$fi
?$f.[;mh
3、处理执行结果 4H-eFs%5
查询语句,返回记录集ResultSet Trv}YT.
更新语句,返回数字,表示该更新影响的记录数 :W*yfhLt
ResultSet的方法 i<^X z
1、next(),将游标往后移动一行,如果成功返回true;否则返回false Y\]ZIvTSb
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 )}@D\(/@
~v;I>ij
4、释放连接 cAW}a
cn.close(); Vke<; k-
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection *(OG+OkC
IgX &aW
可滚动、更新的记录集 k<< x}=
1、创建可滚动、更新的Statement &j F'2D^_
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); *-nO,K>y`
该Statement取得的ResultSet就是可滚动的 \)~d,M}kK
2、创建PreparedStatement时指定参数 el9P@r0
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); mAW.p=;
ResultSet.absolute(9000); u5oM;#{@-
批量更新 |2j,
1、Statement PEf yHf7`
Statement sm = cn.createStatement(); }HoCfiE=X
sm.addBatch(sql1); Fc5.?X-
sm.addBatch(sql2); X,k^p[Rcu
... $gUlM+sK
sm.executeBatch() N#T'}>t y
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 ^jMrM.GY
2、PreparedStatement 8Sr'
PreparedStatement ps = cn.preparedStatement(sql); 9&Jf4lC94
{ `}Zqmfs
ps.setXXX(1,xxx); 5qz,FKx5
... mJUM#ry
ps.addBatch(); 9eMle?pF
} G"<#tif9K
ps.executeBatch(); 7?Wte&C];p
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 hC\
l
\y
(s3k2Z
事务的处理 E!9WZY
1、关闭Connection的自动提交 V"YeF:I
cn.setAutoCommit(false); A(FnU:
2、执行一系列sql语句 A &