java 数据库基本操作 uKz,SqX
1、java数据库操作基本流程 2$14q$eb
2、几个常用的重要技巧: zaFt*~@X
可滚动、更新的记录集 sp7*_&'J
批量更新 %&->%U|'
事务处理 tG8jFou
%/c+`Wd/l$
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 yfjK2
1、取得数据库连接 &K43x&mFF
1)用DriverManager取数据库连接 y.=/J8->
例子 ]c<qM_HWg
String className,url,uid,pwd; 26dUA~|KJ
className = "oracle.jdbc.driver.OracleDriver"; S@}1t4Ls:
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; "]m+z)lWd
uid = "system"; Vo9F
pwd = "manager"; dWXstb:[
Class.forName(className); cXR1grz
Connection cn = DriverManager.getConnection(url,uid,pwd); (]RM6i7
2)用jndi(java的命名和目录服务)方式 Q.9qImgN
例子 5GA\xM-
String jndi = "jdbc/db"; LAP6U.m'd
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); 6ns! ~g@
DataSource ds = (DataSource) ctx.lookup(jndi); kM'"4[,nz
Connection cn = ds.getConnection(); Fi.aC;sx
多用于jsp中 Ul_M3"Z
2、执行sql语句 9U {y1}
1)用Statement来执行sql语句 \":?xh_H
String sql; E]J:~H'Er
Statement sm = cn.createStatement(); gP-nluq
sm.executeQuery(sql); // 执行数据查询语句(select) 6vp *9
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); osOVg0Gyj
2)用PreparedStatement来执行sql语句 +B'8|5tPX
String sql; Z<#hS=eY
sql = "insert into user (id,name) values (?,?)"; 4<lQwV6=
PreparedStatement ps = cn.prepareStatement(sql); BaO1/zk
ps.setInt(1,xxx); Tzt ,/e
ps.setString(2,xxx); [L6w1b,
... ^9_UUzf\
ResultSet rs = ps.executeQuery(); // 查询 c(U
int c = ps.executeUpdate(); // 更新 *d(SI<j
Z2Zq'3*
3、处理执行结果 LuR,f"%2
查询语句,返回记录集ResultSet )jCo%P/
更新语句,返回数字,表示该更新影响的记录数 d'*]ns
ResultSet的方法 =(EI~N
1、next(),将游标往后移动一行,如果成功返回true;否则返回false R7s|`\
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 4"@GNk~e
O1D6^3w
4、释放连接 h6%[q x<
cn.close(); ?sBh=Ds
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection B/J>9||g
hH->%*
可滚动、更新的记录集 v!42DA)
1、创建可滚动、更新的Statement ckjrk
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); @ct+7v~
该Statement取得的ResultSet就是可滚动的 .6m "'m0;
2、创建PreparedStatement时指定参数 .c^
ggy%
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); l;"Ab?P\
ResultSet.absolute(9000); *9 Q^5;y
批量更新 g7CXlT0Q6
1、Statement W%e_~$H0
Statement sm = cn.createStatement(); Sf/q2/r?6[
sm.addBatch(sql1); x|0:P sE
sm.addBatch(sql2); #5&jt@NS
... $&Kq*m 0g
sm.executeBatch() kvGCbRC
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 'r} zY-FM`
2、PreparedStatement 3L_I[T$s
PreparedStatement ps = cn.preparedStatement(sql); TwvAj#j
{ a=xT(G0Re
ps.setXXX(1,xxx); pilh@#_h
... w?mEuXc
ps.addBatch(); _Mc>W0'5@
} C}?0`!Cc%
ps.executeBatch(); lFUWV)J\
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 ]h!`IX
NQ|xM"MqD
事务的处理 3+xy4G@L
1、关闭Connection的自动提交 +'#oz+
cn.setAutoCommit(false); S2C]?6cTq
2、执行一系列sql语句 p T[gdhc
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close K"<*a"1I
Statement sm ; JR9$.fGJ
sm = cn.createStatement(insert into user...); 9
L?;FY)_
sm.executeUpdate(); %8)W0WMe
sm.close(); Qn:kz*:
sm = cn.createStatement("insert into corp...); PzZZ>7_6S
sm.executeUpdate(); Y&*x4&Lb
sm.close(); G",.,Px
3、提交 K?u(1
cn.commit(); V%CUMH =U
4、如果发生异常,那么回滚 ^1jk$$f
cn.rollback();