java 数据库基本操作 Lw7=+h)
1、java数据库操作基本流程 2L_6x<u'
2、几个常用的重要技巧: AdZ;j6#
可滚动、更新的记录集 gd/H``x|Y
批量更新 #%@*p,xh
事务处理 nwt C:*}
nP~({:l8X
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 `IpA.| Y
1、取得数据库连接 5v\!]?(O;
1)用DriverManager取数据库连接 ma$Prd
例子 !}+tdT(y
String className,url,uid,pwd; |wE3UWsy
className = "oracle.jdbc.driver.OracleDriver"; |H}m 4-+*
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; ixm&aW6<
uid = "system"; iTh:N2/-vc
pwd = "manager"; PYRd]%X
Class.forName(className); ^I6^g
Connection cn = DriverManager.getConnection(url,uid,pwd); 2 !"
XzdD
2)用jndi(java的命名和目录服务)方式 V==z"
例子 $/1c= Y@
String jndi = "jdbc/db"; f&,{XZ
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); . v@>JZC
DataSource ds = (DataSource) ctx.lookup(jndi); OX:O^ (-r,
Connection cn = ds.getConnection(); qH,l#I\CG
多用于jsp中 Fk;oE'"D
2、执行sql语句 {+<P:jbz;
1)用Statement来执行sql语句 2g9G{~,@g
String sql; # {fTgq
Statement sm = cn.createStatement(); H=g.34
sm.executeQuery(sql); // 执行数据查询语句(select) X;F?:Iw \
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); 8;Fn7k_Uf
2)用PreparedStatement来执行sql语句 V}o n|A
String sql; 39F
Of
sql = "insert into user (id,name) values (?,?)"; ^taBG3P
PreparedStatement ps = cn.prepareStatement(sql); OU4pjiLx
ps.setInt(1,xxx); juF{}J2
ps.setString(2,xxx); |]Z:&[D]i
... D'l5Zd
ResultSet rs = ps.executeQuery(); // 查询 YKbCdLQ
int c = ps.executeUpdate(); // 更新 )Rat0$6
8n BL\{'B[
3、处理执行结果 R2L;bGI*J
查询语句,返回记录集ResultSet 8mLP5s!7
更新语句,返回数字,表示该更新影响的记录数 |wEN`#.;b
ResultSet的方法 o'~5pS(wq
1、next(),将游标往后移动一行,如果成功返回true;否则返回false -V"22sR]
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 I2$T"K:eo
$GQ`clj<
4、释放连接 [+*$\
cn.close(); ; R=.iOn
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection BG^C9*ZuP
R.[Z]-X
可滚动、更新的记录集 $P7iRM]
1、创建可滚动、更新的Statement j6~nE'sQ
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); X7UuwIIP
该Statement取得的ResultSet就是可滚动的 qzw'zV
2、创建PreparedStatement时指定参数 iGDLZE+?
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); c H-@V<
ResultSet.absolute(9000); E Uar/
批量更新 0qjXQs}
1、Statement {*ZY(6^
Statement sm = cn.createStatement(); ;VO.!5W@eg
sm.addBatch(sql1); aKUS5jDu
sm.addBatch(sql2); ;?}l
... XS0xLt=
sm.executeBatch() )4?x5#
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 Ed0I WPx
2、PreparedStatement 9jp:k><\(c
PreparedStatement ps = cn.preparedStatement(sql); @\oz4^
{ v]%WH~>
ps.setXXX(1,xxx); dLsn\m>
... xCzebG["
ps.addBatch(); b96%")
} B()/.w?A
ps.executeBatch(); fW`&'!
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 1Kvx1p
i`/+,<
事务的处理 xt'tL:d
1、关闭Connection的自动提交 .,~(%#Wl$
cn.setAutoCommit(false); $wYtyN[
2、执行一系列sql语句 {Y}dv`G#Iu
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close -S,ln
Statement sm ; [>#*B9
sm = cn.createStatement(insert into user...); ,<