java 数据库基本操作 qQ3pe:n?
1、java数据库操作基本流程 8sBT&A6&j
2、几个常用的重要技巧: }CZw'fhVWO
可滚动、更新的记录集
JC9$"0d7
批量更新 bZAL~z+ V
事务处理 tcRJ1:d
a9 q:e
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 {_L l'S
1、取得数据库连接 Bxw(pACf
1)用DriverManager取数据库连接 =-r); d
例子 y3j"vKG
String className,url,uid,pwd; |*b-m k
className = "oracle.jdbc.driver.OracleDriver"; Q@PDhISa
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; ]xoG{%vgb
uid = "system"; |'P$zMAF
pwd = "manager"; 1tI=Dwx
Class.forName(className); k?L2LIB<
Connection cn = DriverManager.getConnection(url,uid,pwd); Ndb7>"W
2)用jndi(java的命名和目录服务)方式 qP&:9eL
例子 '3sySsD&O
String jndi = "jdbc/db"; $%'3w~h`
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); 9;\mq'v%
DataSource ds = (DataSource) ctx.lookup(jndi); wD$UShnm9-
Connection cn = ds.getConnection(); =O8>[u;
多用于jsp中 S-3hLw&?
2、执行sql语句 RjgJIVm(
1)用Statement来执行sql语句 ":s_O.
String sql; WcM\4q@
Statement sm = cn.createStatement(); q
&{<HcP
sm.executeQuery(sql); // 执行数据查询语句(select) X's<+hK&
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); #pK"
^O*!
2)用PreparedStatement来执行sql语句 u^JsKG+,:
String sql; YHu]\'Ff
sql = "insert into user (id,name) values (?,?)"; goF87^M
PreparedStatement ps = cn.prepareStatement(sql); n{etDO
ps.setInt(1,xxx); (dQ=i
ps.setString(2,xxx); VlL%dN;
0
... QX<x2U
ResultSet rs = ps.executeQuery(); // 查询 [.Kp/,JY
int c = ps.executeUpdate(); // 更新 ^Mc9MZ)
|</) 6r
3、处理执行结果 mW{>
查询语句,返回记录集ResultSet W\w#}kY
更新语句,返回数字,表示该更新影响的记录数 7m]J7 +4
ResultSet的方法 pWv1XTs@t:
1、next(),将游标往后移动一行,如果成功返回true;否则返回false |S|'o*u
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 [Y@>,B!V
;y1/b(t
4、释放连接 yf8kBT:&S
cn.close(); \weg%a
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection tk=S4/VWv
d}ycC.h4k
可滚动、更新的记录集 ~Fwbi
1、创建可滚动、更新的Statement ~7*2Jp'
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); &(32s! qH
该Statement取得的ResultSet就是可滚动的 NW 2`)e'
2、创建PreparedStatement时指定参数 Kr|.I2?"
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); ^[Ka+E^Q
ResultSet.absolute(9000); Vq{3:QBR
批量更新 $6D*G-*8
1、Statement NV9JMB{q
Statement sm = cn.createStatement(); K5XW&|tY!
sm.addBatch(sql1); Av5:/c.B
sm.addBatch(sql2); x{<l8vL=-c
... E!mv}
sm.executeBatch() 'x"(OdM:[
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 02*qf:kTnA
2、PreparedStatement 'U`;4AN
PreparedStatement ps = cn.preparedStatement(sql); w=rD8@
{ S1mMz
i
ps.setXXX(1,xxx); vW vu&3tx
... -]D/8,|s
ps.addBatch(); VHl1f7%@H
} 6W=V8
ps.executeBatch(); E0&d*BI2
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 fbbbTZy
:|n iFK4
事务的处理 | Rhqi
1、关闭Connection的自动提交 ~) w4Tq
cn.setAutoCommit(false); i 61k
2、执行一系列sql语句 6Xm'^T
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close T:m"
eD;
Statement sm ; r-.@MbBm
sm = cn.createStatement(insert into user...); h"0)spF"d
sm.executeUpdate(); u5glKE
sm.close(); "opMS/a"7
sm = cn.createStatement("insert into corp...); dpNERc5
sm.executeUpdate(); \#I$H9O
sm.close(); |C<#M<
3、提交 25{_x3t^
cn.commit(); 2@GizT*mA
4、如果发生异常,那么回滚 ^rP]B-)
cn.rollback();