java 数据库基本操作 |D-[M_T5
1、java数据库操作基本流程 D#1R$4M=
2、几个常用的重要技巧: ;]grbqXVE
可滚动、更新的记录集 J1I,;WGf
批量更新 I
m
I$~q'
事务处理 <!>\
n\A
3A`]Rk
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 xkRMg2X.>9
1、取得数据库连接 k/{WlLN
1)用DriverManager取数据库连接 1}la)lC
例子 Wj,s/Yr:
String className,url,uid,pwd; s$pXn&:
className = "oracle.jdbc.driver.OracleDriver"; asYk#;z\"
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; !@Qk=Xkg
uid = "system"; q&z'S
pwd = "manager"; \78^ O
Class.forName(className); G!$~'o%/
Connection cn = DriverManager.getConnection(url,uid,pwd); bC:sd2s
2)用jndi(java的命名和目录服务)方式 ].xSX0YQ%
例子 -W^{)%4g
String jndi = "jdbc/db"; Z qn$ >mG-
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); ,L-/7}"VHA
DataSource ds = (DataSource) ctx.lookup(jndi); /5Qh*.(S
Connection cn = ds.getConnection(); YRVh[Bqg`
多用于jsp中 r craf4%
2、执行sql语句 Vxap+<m
1)用Statement来执行sql语句 RBf#5VjOG!
String sql; rZdOU?U
Statement sm = cn.createStatement(); /xJD/"Y3&
sm.executeQuery(sql); // 执行数据查询语句(select) ' F.^ 8/>
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); %pq.fZI
2)用PreparedStatement来执行sql语句 13F]7l-#
String sql; VnW6$W?g
sql = "insert into user (id,name) values (?,?)"; 8%B_nVc
PreparedStatement ps = cn.prepareStatement(sql); ben-<3r
ps.setInt(1,xxx); ;iX~3[]
ps.setString(2,xxx); Rs"=o>Qu
... h +B7BjA>G
ResultSet rs = ps.executeQuery(); // 查询 36OQHv;&
int c = ps.executeUpdate(); // 更新 lgiKNZgB?
z9IW&f~~P
3、处理执行结果 t'eu>a1D
查询语句,返回记录集ResultSet UZs '[pm)
更新语句,返回数字,表示该更新影响的记录数 &T, ,fz$
ResultSet的方法 |
CFG<]
1、next(),将游标往后移动一行,如果成功返回true;否则返回false q]: 72+
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 :'wxm3f
3v_j*wy
4、释放连接 eGQ4aQhi
cn.close(); DlCN
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection x`7Le&4f
uxL+oP0
可滚动、更新的记录集 wX)'1H):T
1、创建可滚动、更新的Statement l[[`-f8j
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); J&\Q3_vro9
该Statement取得的ResultSet就是可滚动的 kum@cA
2、创建PreparedStatement时指定参数 ^}$t(t
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); N~/X.D4e#
ResultSet.absolute(9000); 'Iw`+=iVz
批量更新 %%X/gvaJ
1、Statement Bv~^keuj3t
Statement sm = cn.createStatement(); \m)s"Sh.
sm.addBatch(sql1); d>F7i~W
sm.addBatch(sql2); d4IQ;u
... 2i6=g<
sm.executeBatch() )2y [#Blo
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 -5og)ZGVUA
2、PreparedStatement .CEC
g*f
PreparedStatement ps = cn.preparedStatement(sql); qfT9g>EF
{ -<x%
ps.setXXX(1,xxx); y]{b4e
... 31^/9lb
ps.addBatch(); 4ZUtK/i+r
}
j7_,V?5z
ps.executeBatch(); 8t=H
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 66>X$nx(z
/>Zfx. Aj6
事务的处理 m$[:J
1、关闭Connection的自动提交 )( 3)^/Xz
cn.setAutoCommit(false); , Zie2I?q
2、执行一系列sql语句 J ##a;6@
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close {nSgiqd"28
Statement sm ; 7n .A QII
sm = cn.createStatement(insert into user...); rV"3oM]Lo
sm.executeUpdate(); %fld<O
sm.close(); uu]C;wl
sm = cn.createStatement("insert into corp...); -{*3<2rFK
sm.executeUpdate(); ,DHH5sDCn
sm.close(); BIMX2.S1o
3、提交 CaCApL
cn.commit(); + rB3\R"d
4、如果发生异常,那么回滚 ;/Y#ph[
cn.rollback();