java 数据库基本操作 -uR{X G. D
1、java数据库操作基本流程 Fzs>J&sY&
2、几个常用的重要技巧: YRa4W.&Yn
可滚动、更新的记录集 [t}):}~F|
批量更新 2]Fu
1
事务处理 GVp
hmzair3X
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 -Op@y2+c
1、取得数据库连接 c,BAa*]K
1)用DriverManager取数据库连接 j;0ih_Z@4W
例子 iPFL"v<#J
String className,url,uid,pwd; M7p8^NL
className = "oracle.jdbc.driver.OracleDriver"; jeFN*r_
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; 7 6*hc
uid = "system"; m+$/DD^-zl
pwd = "manager"; &!#2ZJ}{
Class.forName(className); WB;J1TpM7
Connection cn = DriverManager.getConnection(url,uid,pwd); ,?w!5N;iRO
2)用jndi(java的命名和目录服务)方式 ![Hhxu
例子 $~hdm$
String jndi = "jdbc/db"; /,t|
!)\]
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); '}zT1F*
p=
DataSource ds = (DataSource) ctx.lookup(jndi); *^6k[3VY
Connection cn = ds.getConnection(); nOuN|q=C
多用于jsp中 TAAR'Jz S
2、执行sql语句 >C^/,/%v
1)用Statement来执行sql语句 0#
UAjT3
String sql; lxOqs:b
Statement sm = cn.createStatement(); ?1DUNZ6
sm.executeQuery(sql); // 执行数据查询语句(select) wz@/5c/u
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); 8>v7v&Bh|
2)用PreparedStatement来执行sql语句 !h/dZ`#
String sql; %
&+|==-
sql = "insert into user (id,name) values (?,?)"; qa;EI ;8
PreparedStatement ps = cn.prepareStatement(sql); Sgx+V"bkT
ps.setInt(1,xxx); VVN#
$
ps.setString(2,xxx); A?sNXhh
... aKOf;^@
ResultSet rs = ps.executeQuery(); // 查询 ,E]|\_]
int c = ps.executeUpdate(); // 更新 FLEg0/m0
|w,^"j2R
3、处理执行结果 u=l0f6W
查询语句,返回记录集ResultSet r'PE5xqF
更新语句,返回数字,表示该更新影响的记录数 }{#7Z8
ResultSet的方法 <tU
:U<ea]
1、next(),将游标往后移动一行,如果成功返回true;否则返回false C &FN#B
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 ZU^Q1}</5
A ')(SGSc
4、释放连接 e
mC\i
cn.close(); m^Rd Iy)
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection ndB@J*Imu
nYgx9Q"<om
可滚动、更新的记录集 &}O8w77
1、创建可滚动、更新的Statement SE-} XI\
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); {'&8`d
该Statement取得的ResultSet就是可滚动的 _32/WQF6
2、创建PreparedStatement时指定参数 o:f|zf>
i<
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); jiOf')d5
ResultSet.absolute(9000); y,1S&k
批量更新 <JJkki
1、Statement h
bdEw=r?
Statement sm = cn.createStatement(); z.{HD9TD
sm.addBatch(sql1); iPNd!_
sm.addBatch(sql2); L c{!FG>
... zo87^y5?G
sm.executeBatch() .0KOnLdK
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 Hc"N&
%X[
2、PreparedStatement JH-nvv
PreparedStatement ps = cn.preparedStatement(sql); krwf8!bI
{ ?Ip$;s
ps.setXXX(1,xxx); 0rGj|@+;
... -^y1iN'D
ps.addBatch(); pO5v*oONz+
} l`oT:
ps.executeBatch(); 8[f8k3g
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 @ >
cdHv
H2s*s[T
-
事务的处理 Kl!DKeF
1、关闭Connection的自动提交 w# xncH:1
cn.setAutoCommit(false); X #H:&*[!
2、执行一系列sql语句 J~fuW?a]r
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close 5=Zp%[#
Statement sm ; nJW_a&'
sm = cn.createStatement(insert into user...); 0>8ZN!@K
sm.executeUpdate(); :R{x]sv
sm.close(); % d4+Ctrp-
sm = cn.createStatement("insert into corp...); $;Q=iv3
sm.executeUpdate(); ,d3Q+9/
sm.close(); G)4ZK#wz
3、提交 VoWA tNU
cn.commit(); Hs.6;|0%
4、如果发生异常,那么回滚 r=xTs,xx
cn.rollback();