java 数据库基本操作 FdMTc(>
1、java数据库操作基本流程 *g 2N&U
2、几个常用的重要技巧: R,W
w/D
可滚动、更新的记录集 qLm
g18
批量更新 O)}5`0@L
事务处理 @86I|cY
6?3\P>`3Y
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 s C?-L
1、取得数据库连接 ,a}
vx"~
1)用DriverManager取数据库连接 A)u,Hvn
例子 5=P*<Dnj
String className,url,uid,pwd; 6ieP` bct
className = "oracle.jdbc.driver.OracleDriver"; 9AZpvQ
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; }<G#bh6;Q
uid = "system"; Np R&`]
pwd = "manager"; AJ85[~(lX
Class.forName(className); s;YuB#Z
Connection cn = DriverManager.getConnection(url,uid,pwd); bF? {
2)用jndi(java的命名和目录服务)方式 9K_p4
mq
例子 0uf)6(f
String jndi = "jdbc/db"; :<`po4/
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); 4'0rgS
DataSource ds = (DataSource) ctx.lookup(jndi); c=~FXV!
Connection cn = ds.getConnection(); *W=R:Bl!
多用于jsp中 $rmfE
2、执行sql语句 kV+O|9
1)用Statement来执行sql语句 |1^
!rHg
String sql; @ykM98K
Statement sm = cn.createStatement(); DsF<P@O6
sm.executeQuery(sql); // 执行数据查询语句(select) w;KNS'
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); CqbPUcK
2)用PreparedStatement来执行sql语句 / FA0(< -}
String sql; WY" `wM
sql = "insert into user (id,name) values (?,?)"; Cw&U*H
PreparedStatement ps = cn.prepareStatement(sql); \*6Ld%:h$
ps.setInt(1,xxx); ayoqitXD?
ps.setString(2,xxx); 0|@*`-:VO
... K
na
ResultSet rs = ps.executeQuery(); // 查询 p1(<F_Kta
int c = ps.executeUpdate(); // 更新 8!u8ZvbFG
q~*>
3、处理执行结果 u.L{3gkT
查询语句,返回记录集ResultSet u}I\!-EX!v
更新语句,返回数字,表示该更新影响的记录数 $oU40HA)W]
ResultSet的方法 E]j2%}6Z%
1、next(),将游标往后移动一行,如果成功返回true;否则返回false 7Q3a0`Iq
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 \1b! I)T9
q\a'pp9d
4、释放连接 Ud[Zv?tA:
cn.close(); .YcI .
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection F~tT5?+
yUzpl[*e^o
可滚动、更新的记录集 Foc) u~
1、创建可滚动、更新的Statement U k*HRudt
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); V8{5 y
<Y>
该Statement取得的ResultSet就是可滚动的 j=~c(
B
2、创建PreparedStatement时指定参数 ]Uee!-dZ
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); KZ;Q7 1
ResultSet.absolute(9000); (:2,Rr1"
批量更新 jLu`DKB
1、Statement K}p!W"!o
Statement sm = cn.createStatement(); &E&e5(&$
sm.addBatch(sql1); Ot#O];3
sm.addBatch(sql2); iI(7{$y
... 1"5-doo
sm.executeBatch() dJ}E,rW}
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 w0iv\yIRQ
2、PreparedStatement
B1!b@0^
PreparedStatement ps = cn.preparedStatement(sql); 0kdPr:B Q0
{ N?mTAF'M
ps.setXXX(1,xxx); o<r|YRzQl
... kxp, ZP
ps.addBatch(); g1s\6%g
} N-4k
9l1
ps.executeBatch(); * vMNv
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 b7_uT`<
ToWtltCD
事务的处理 $<(FZb=
1、关闭Connection的自动提交 Zw`vPvb!
cn.setAutoCommit(false); ;>duY\$<
2、执行一系列sql语句 !$i*u-%4
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close &