java 数据库基本操作 T +\ B'"
1、java数据库操作基本流程 p":@>v?
2、几个常用的重要技巧: s`Vf+l0
可滚动、更新的记录集 \dNhzd#
批量更新 qBiyGlu4
事务处理 x^2 W?<
cdp{W
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 YX `%A6
1、取得数据库连接 qhxC 5f4Z
1)用DriverManager取数据库连接 0WS|~?OR@
例子 %gTVW!q
String className,url,uid,pwd; $[QcEk
className = "oracle.jdbc.driver.OracleDriver"; *R!]47Y d
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; $'u\B
uid = "system"; Iv1c4"
pwd = "manager"; w{P6i<J
Class.forName(className); 62NkU)u
Connection cn = DriverManager.getConnection(url,uid,pwd); ;&`:|Hf*
2)用jndi(java的命名和目录服务)方式 `(T!>QVW+g
例子 4
m$sJ
String jndi = "jdbc/db"; YAMfP8S
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); u9@b<
DataSource ds = (DataSource) ctx.lookup(jndi); P' FKk<
Connection cn = ds.getConnection(); -7L
多用于jsp中 !&0a<~Wi
2、执行sql语句 )8]3kQffJ=
1)用Statement来执行sql语句 4(sttd_
String sql; ;(`e^IVf
Statement sm = cn.createStatement(); ReqE?CeV
sm.executeQuery(sql); // 执行数据查询语句(select) 8q*";>*
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); MBv/
2)用PreparedStatement来执行sql语句 LH.%\TMN$
String sql; i0i`k^bA
sql = "insert into user (id,name) values (?,?)"; w=$'Lt!
PreparedStatement ps = cn.prepareStatement(sql); JP_kQ
ps.setInt(1,xxx); N4+g("
ps.setString(2,xxx); L`pY27|
... yjR)Z9t
ResultSet rs = ps.executeQuery(); // 查询 N.n1<
int c = ps.executeUpdate(); // 更新 H\f/n`@,G
,N;v~D$Y
3、处理执行结果 P09,P
查询语句,返回记录集ResultSet hqWbp*
更新语句,返回数字,表示该更新影响的记录数 nO}$ 76*'0
ResultSet的方法 lG
<yJ~{
1、next(),将游标往后移动一行,如果成功返回true;否则返回false `
Rsl]
GB
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 hJ4S3b
r?]%d!
4、释放连接 #O><A&FrF`
cn.close(); ]
EV`dIk
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection ~RCg.&[ou
/6smVz@O
可滚动、更新的记录集 A{t"M-<
1、创建可滚动、更新的Statement Q.>/*8R;
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); 5d(qtFH1
该Statement取得的ResultSet就是可滚动的 ef,F[-2^o
2、创建PreparedStatement时指定参数 =lm nzu<
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); @Z"?^2
ResultSet.absolute(9000); iU,/!IQ
批量更新 "bi !=
1、Statement 8}9Ob~on
Statement sm = cn.createStatement(); b+_hI)T
sm.addBatch(sql1); e
%&
sm.addBatch(sql2); :=Nb=&lst
... M(NH9EE
sm.executeBatch() +yiU@K).0
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 h\2}875
2、PreparedStatement p^Agh
PreparedStatement ps = cn.preparedStatement(sql); fvO;lA>`
{ "C& J wm?
ps.setXXX(1,xxx); 9G+y.^/6
... !&\meS{
ps.addBatch(); a.1`\$]d
} VZIKjrKs
ps.executeBatch(); uGM>C"
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 ?&XzW+(X
E"ZEo9y@^
事务的处理 `fLfT'
1、关闭Connection的自动提交 (A2U~j?Ry}
cn.setAutoCommit(false); -#daBx
?
2、执行一系列sql语句 {dDq*sLf
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close
22PGWSQ
Statement sm ; M;V&