java 数据库基本操作 f\2IKpF2
1、java数据库操作基本流程 s, Gl{
2、几个常用的重要技巧: ,-6Oma
-
可滚动、更新的记录集 xeF>"6\
批量更新 %6[,a
事务处理 T
6D+@i
vbmt0df
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 wa[L[mw
1、取得数据库连接 j-9)Sijj{
1)用DriverManager取数据库连接 K$Bv4_|x
例子 m.+h@
String className,url,uid,pwd; y_9\07va<
className = "oracle.jdbc.driver.OracleDriver"; A}lxJ5h0
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; RsDSsux
uid = "system"; dqB,i9--
pwd = "manager"; ]zYIblpde
Class.forName(className); BvP\c_
Connection cn = DriverManager.getConnection(url,uid,pwd); =K:[26
2)用jndi(java的命名和目录服务)方式 :aOR@])>o
例子 5M=U*BI
String jndi = "jdbc/db"; N}5
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); 4ior
DataSource ds = (DataSource) ctx.lookup(jndi); Jh.~]\u
Connection cn = ds.getConnection(); ~R;/u")@e
多用于jsp中 0PkX- .
2、执行sql语句 E7O3$B8
1)用Statement来执行sql语句 HVa D
String sql; TyV~2pcN
Statement sm = cn.createStatement(); 43k'96[2d
sm.executeQuery(sql); // 执行数据查询语句(select) pEwo}NS*H
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); eQi^d/yi
2)用PreparedStatement来执行sql语句 }-tJ .3Zw
String sql; ku,{NY
f^Y
sql = "insert into user (id,name) values (?,?)"; bkdXBCBx?
PreparedStatement ps = cn.prepareStatement(sql); N7s0Ua'-v
ps.setInt(1,xxx); 6c!F%xU}
ps.setString(2,xxx); }aOqoi7w
... LZ)g&A(j?
ResultSet rs = ps.executeQuery(); // 查询 Pyuul4(
int c = ps.executeUpdate(); // 更新 pJFn
8&!J
T8m]f<
3、处理执行结果 = 9Yfo,F
查询语句,返回记录集ResultSet `LoRudf_`
更新语句,返回数字,表示该更新影响的记录数 (RI)<zaK
;
ResultSet的方法 ,LwinjHA*
1、next(),将游标往后移动一行,如果成功返回true;否则返回false to:
;:Goa
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 K1X-<5]{
';G/,wB?`
4、释放连接 /}1|'?P
cn.close(); ~0,v Q
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection <6;M\:Y*T
$Z;8@O3
可滚动、更新的记录集 {*;8`+R&
1、创建可滚动、更新的Statement qcO~}MJr}^
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); _1?u AQ3,
该Statement取得的ResultSet就是可滚动的 Pt85q?- >
2、创建PreparedStatement时指定参数 mW]dhY 3X
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); KAZ<w~55c
ResultSet.absolute(9000); 07SW$INb
批量更新 ;R6f9tu2
1、Statement U~=?I)Ni
Statement sm = cn.createStatement(); FV9{u[3m
sm.addBatch(sql1); "<|KR{/+
sm.addBatch(sql2); @N '_qu
... 8{0XqE~ix=
sm.executeBatch() 8qkQ*uJP
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 h<LS`$PK;E
2、PreparedStatement NUM!'+H_h
PreparedStatement ps = cn.preparedStatement(sql); %qcCv9
{ :sw5@JdJ
ps.setXXX(1,xxx); Re~6'
... ~hq\XQX
ps.addBatch(); _f2rz+
} TNh&g.
ps.executeBatch(); Otu?J_ d3
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 h];H]15&
f~l pa7
事务的处理 .pZYPKMaE
1、关闭Connection的自动提交 ;S^"Y:7)
cn.setAutoCommit(false); D0 k ,8|
2、执行一系列sql语句 gm5%X'XL
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close ,>#\aO1n
Statement sm ; o,j_eheAM
sm = cn.createStatement(insert into user...); g:RS7od=,
sm.executeUpdate(); ri-&3%%z<
sm.close(); [&~x5l
8\C
sm = cn.createStatement("insert into corp...); Uy=yA
sm.executeUpdate(); b,:^\HKC
sm.close(); r1q'+i
3、提交 {QG6ldI
cn.commit(); #:=c)[G8
4、如果发生异常,那么回滚 5Kd"W,
cn.rollback();