java 数据库基本操作 0oi.k;
1、java数据库操作基本流程 C\{hN
2、几个常用的重要技巧: .p'McCV=
可滚动、更新的记录集 [;D1O;c'W.
批量更新 W_/$H_04+
事务处理 hQL@q7tUr
+zo\#8*0MF
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 jzi^OI7
1、取得数据库连接 Yyw3+3
1)用DriverManager取数据库连接 j#p3<V S4
例子 C4-%|+Q i
String className,url,uid,pwd; 9&B#@cw
className = "oracle.jdbc.driver.OracleDriver"; k"/}9[6:U5
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; lPA}06hU
uid = "system"; Ts=TaRwWf
pwd = "manager"; \qG` ts
Class.forName(className); 28}L.>5k
Connection cn = DriverManager.getConnection(url,uid,pwd); 8yZs>Og?
2)用jndi(java的命名和目录服务)方式 rJ6N'vw>
例子 (X2[}K
String jndi = "jdbc/db"; XA69t2J~F
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); Ne1W!0YLK
DataSource ds = (DataSource) ctx.lookup(jndi); aE:$ N#|Qa
Connection cn = ds.getConnection(); Wn2J]BH
多用于jsp中
jEP'jib%
2、执行sql语句 =6fJUy^M\
1)用Statement来执行sql语句 H:z<]Rc
String sql; UhU+vy6)/
Statement sm = cn.createStatement(); -"2%+S{
sm.executeQuery(sql); // 执行数据查询语句(select) t|UM2h
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); n5fc_N/8O=
2)用PreparedStatement来执行sql语句
VIod6Vk
String sql; K[9P{0hA
sql = "insert into user (id,name) values (?,?)"; {e[~1]j3
PreparedStatement ps = cn.prepareStatement(sql); ^Vc(oa&;
ps.setInt(1,xxx); [8WG
ps.setString(2,xxx); ?xQm_
91X^
... 9:E.Iy
ResultSet rs = ps.executeQuery(); // 查询 4a.8n!sys
int c = ps.executeUpdate(); // 更新 LTb#1JC
iWe'|Br
3、处理执行结果 ue!4By8T
查询语句,返回记录集ResultSet N{Pa&/V
更新语句,返回数字,表示该更新影响的记录数 7<?Aou
ResultSet的方法 S[&yO-=p6
1、next(),将游标往后移动一行,如果成功返回true;否则返回false oHu 7<r
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 2,h]Y=.s
u+pZ<Bb
4、释放连接 kidv^`.H$w
cn.close(); /Hq#!2)
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection b0N7[M1Xl
ZNDjk
可滚动、更新的记录集 QbWeQ[V{
1、创建可滚动、更新的Statement )fke;Y0
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); j4#S/:Q<7
该Statement取得的ResultSet就是可滚动的 9m%+ 6#|
2、创建PreparedStatement时指定参数 "1Y DT-I"
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); og*ti!Z
ResultSet.absolute(9000); >T\^dHtz
批量更新 2aUE<@RU[
1、Statement dA(+02U/.
Statement sm = cn.createStatement(); ,LU|WXRB
sm.addBatch(sql1); k/Ao?R=@gI
sm.addBatch(sql2); M=5hp&=
... %w3tzE1Hq
sm.executeBatch() NV2$ >D
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 j4(f1
2、PreparedStatement Te>m9Pav
PreparedStatement ps = cn.preparedStatement(sql); 0A75)T=lQ
{ `2G%&R,k"D
ps.setXXX(1,xxx); kNrd=s,-]D
... ng[LSB*57Y
ps.addBatch(); |1+mHp
} rGQ([e
ps.executeBatch(); GM0pHmC
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 t RTJ Q
0 \o5+
事务的处理 qcBamf
1、关闭Connection的自动提交 *OY
Nx4 k
cn.setAutoCommit(false); (Ii+}Mfp
2、执行一系列sql语句 e{ZS"e`!
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close ^8g<>,$
Statement sm ; ;![rwra
sm = cn.createStatement(insert into user...); :*tFW~<*b
sm.executeUpdate(); !WD^To
sm.close(); A=wh&X
sm = cn.createStatement("insert into corp...); msZ3%L
sm.executeUpdate(); ~8lB#NuN
sm.close(); m{rsjdnA
3、提交 W3B:)<