java 数据库基本操作 t..@69
1、java数据库操作基本流程 n4AQ
2、几个常用的重要技巧: _ [hVGCSB
可滚动、更新的记录集 !ZN"(0#qz
批量更新 +ldgT"
事务处理 \AD|;tA\vE
(rf8"T!"
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 <$nMqUu0
1、取得数据库连接 Wb{8WPS
1)用DriverManager取数据库连接 **n109R
例子 Q>/[*(.Wd
String className,url,uid,pwd; %BkPkQA
className = "oracle.jdbc.driver.OracleDriver"; C9`x"$
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; s:sk`~2<gd
uid = "system"; G^\.xk]
pwd = "manager"; fd1z
XK#Z2
Class.forName(className); pA5X<)~
Connection cn = DriverManager.getConnection(url,uid,pwd); jpfFJon)w
2)用jndi(java的命名和目录服务)方式 8{-bG8L> 5
例子 !R$t>X
String jndi = "jdbc/db"; 3.04Toq!
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); [sG!|@r
DataSource ds = (DataSource) ctx.lookup(jndi); kx[h41|n
Connection cn = ds.getConnection(); cvnRd.&
多用于jsp中 ^0"[l {
2、执行sql语句 I}/-zyx>=
1)用Statement来执行sql语句 Z&y9m@
String sql; /}-LaiS
Statement sm = cn.createStatement(); &?SU3@3|
sm.executeQuery(sql); // 执行数据查询语句(select) O#b%&s"o
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); -$j|&l
2)用PreparedStatement来执行sql语句 'A#l$pJp7
String sql; |+Ub3<b[]
sql = "insert into user (id,name) values (?,?)"; #xxs^Kbqa#
PreparedStatement ps = cn.prepareStatement(sql); gG46hO-M%x
ps.setInt(1,xxx); y/Q,[Uzk\
ps.setString(2,xxx); +q~dS.
... H:L<gv(rG
ResultSet rs = ps.executeQuery(); // 查询 =q*j". <
int c = ps.executeUpdate(); // 更新 v6KF0mqA&
*5S~@
3、处理执行结果 nx`I9j\
查询语句,返回记录集ResultSet -(![xZ1{K
更新语句,返回数字,表示该更新影响的记录数 kM @heFJb.
ResultSet的方法 ^WIGd"^
1、next(),将游标往后移动一行,如果成功返回true;否则返回false JVNp= ikK
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 B#x.4~YX
;kF+V*
4、释放连接 ~YrO>H` B
cn.close(); 'sTMUPg`
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection J]4Uh_>)
B3&`/{u
可滚动、更新的记录集 Ha20g/UN.
1、创建可滚动、更新的Statement ^eWD4Vp|4
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); K<ok1g'0
该Statement取得的ResultSet就是可滚动的 \@:mq]Y
2、创建PreparedStatement时指定参数 3R$*G8v
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); W&0KO-}ot
ResultSet.absolute(9000); !5[5l!{x
批量更新 2z027P-Q
1、Statement EEO)b_(
Statement sm = cn.createStatement(); U>kL|X3 V
sm.addBatch(sql1); *`wgqin
sm.addBatch(sql2); A;C)#Q/
... G8!* &vR/
sm.executeBatch() 7
a_99?J
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 \TXCq@
2、PreparedStatement #R3|nL
PreparedStatement ps = cn.preparedStatement(sql); $2gZpO|
{ T0P_&E@X
ps.setXXX(1,xxx); \#)w$O
... Oi4tG&q
ps.addBatch(); XfH[:XG3
} d,caO E8N
ps.executeBatch(); JQ]A"xTIa*
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 WkR=(dss8
)Fh5*UC
事务的处理 \L{V|}"X
1、关闭Connection的自动提交 q <Zza
cn.setAutoCommit(false); k'JfXrW<!
2、执行一系列sql语句 =-|,v*
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close O4fl$egQU
Statement sm ; %.VFj7J
sm = cn.createStatement(insert into user...); use`
y^c
sm.executeUpdate(); ptEChoZ6
sm.close(); h1.<\GO
sm = cn.createStatement("insert into corp...); #=\ nuT'oy
sm.executeUpdate(); j?y_ H[Z
sm.close(); HH94?&
3、提交 80;^]l
cn.commit(); lcYjwA
4、如果发生异常,那么回滚 Z</.Ss 4
cn.rollback();