java 数据库基本操作 UR5`ue ;
1、java数据库操作基本流程 /2VJX@h
2、几个常用的重要技巧: [opGZ`>)j"
可滚动、更新的记录集 ;]:@n;c\
批量更新 caX<
n>
事务处理 1m0c|ckb
Z<{QaY$"
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 dUdT7ixo
1、取得数据库连接 5Jnlz@P9
1)用DriverManager取数据库连接 E&:,oG2M
例子 MnW+25=N
String className,url,uid,pwd; {BU;$
className = "oracle.jdbc.driver.OracleDriver"; w@fi{H(R
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; ( &x['IR
uid = "system"; .6 ?U@2
pwd = "manager"; LjHVJSC
Class.forName(className); vY`s'%WV
Connection cn = DriverManager.getConnection(url,uid,pwd); ;YL i{
2)用jndi(java的命名和目录服务)方式 Z;)%%V%o
例子 B4 }bVjs
String jndi = "jdbc/db"; hehFEyx
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); ^T-V^^#(
DataSource ds = (DataSource) ctx.lookup(jndi); S:ztXhif>
Connection cn = ds.getConnection(); sdmT
多用于jsp中 b5n'=doR/I
2、执行sql语句 lsNd_7k
1)用Statement来执行sql语句 -d:Jta!}{
String sql; kylVH!
@l
Statement sm = cn.createStatement(); @pU)_d!pJ
sm.executeQuery(sql); // 执行数据查询语句(select) %ULr8)R;
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); Dv`c<+q(#
2)用PreparedStatement来执行sql语句 \xoP)Ub>
String sql; u\nh[1)a)
sql = "insert into user (id,name) values (?,?)"; ^pk7"l4Xm
PreparedStatement ps = cn.prepareStatement(sql); <p"iY}x[H
ps.setInt(1,xxx); z*)T%p
ps.setString(2,xxx); "g8M0[7e3
... r",GC]
ResultSet rs = ps.executeQuery(); // 查询 sCHJ&>m5-
int c = ps.executeUpdate(); // 更新 Q&bM\;Ml
]e@Oiq
3、处理执行结果 Pk)1WK7E
查询语句,返回记录集ResultSet -A!%*9Z
更新语句,返回数字,表示该更新影响的记录数 7Hu3>4<
ResultSet的方法
J5jvouR
1、next(),将游标往后移动一行,如果成功返回true;否则返回false jEJT-*I1+
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 uM6+?A9@l
k"w"hg&e
4、释放连接 k|d+#u[Mj@
cn.close(); $* Kvc$D
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection wLr_-vJ
wq `Bd
可滚动、更新的记录集 }RqK84K
1、创建可滚动、更新的Statement >[*qf9$
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); *c+ (-
该Statement取得的ResultSet就是可滚动的 <c/5b]No
2、创建PreparedStatement时指定参数 *~i
])4
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); /&94 eC
ResultSet.absolute(9000); ,zY$8y]
批量更新 lHX72s|V
1、Statement 8}UIbF
Statement sm = cn.createStatement(); 1|wL\I
sm.addBatch(sql1); f&
'
sm.addBatch(sql2); N] sAji*
... ?FcAXA/J{
sm.executeBatch() icK/],
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 "'\$
g[k
2、PreparedStatement 3m)y|$R
PreparedStatement ps = cn.preparedStatement(sql); Tnm.A?
{ wD)XjX
ps.setXXX(1,xxx); ~e@z;]CiY
... TRq6NB
ps.addBatch(); yz8jw:d^-
} ')3
bl3:
ps.executeBatch(); gB'6`'
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 Q'0d~6n&{
6NHX2Ja
事务的处理 |
%Vh`HT
1、关闭Connection的自动提交 XOS[No~
cn.setAutoCommit(false); kZ3ThIk%
2、执行一系列sql语句 ,nm*q#R,0
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close <UQbt N-B\
Statement sm ; C~iL3Cb
sm = cn.createStatement(insert into user...); Dm<A
^u8
sm.executeUpdate(); ySDH"|0
sm.close(); n7-6-
#
sm = cn.createStatement("insert into corp...); <e</m)j
sm.executeUpdate(); y
h9*z3
sm.close(); {{p7 3
'u
3、提交 X}\:_/
cn.commit(); 3/n5#&c\4
4、如果发生异常,那么回滚 Jz e:[MYS
cn.rollback();