java 数据库基本操作 .Xxxz
Wyk
1、java数据库操作基本流程 X2~KNw
2、几个常用的重要技巧: Iw$T'I+4W
可滚动、更新的记录集 w3fD6$
批量更新 JqN$B\J,
事务处理 NXOvC!<
e \kR/<L
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 ](ztb)
1、取得数据库连接 4Im}!q5;:<
1)用DriverManager取数据库连接 )OlYz!#?
例子 H?ue!5R#L
String className,url,uid,pwd; (a,`Y.
className = "oracle.jdbc.driver.OracleDriver"; 0icB2Jm:D}
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; &$qIJvMiK
uid = "system"; ]/R>nT
pwd = "manager"; ]YDqmIW
Class.forName(className); "tK3h3/Xv
Connection cn = DriverManager.getConnection(url,uid,pwd); )B@&q.2B=
2)用jndi(java的命名和目录服务)方式 N0
t26| A
例子 (hY^E(D
String jndi = "jdbc/db"; 3U?^49bJ
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); %z
@T /
DataSource ds = (DataSource) ctx.lookup(jndi); "VsS-b^ P
Connection cn = ds.getConnection(); HqOnZ>D
多用于jsp中 m1 p%,
2、执行sql语句 el^<M,7!
1)用Statement来执行sql语句 t!ZFpMv]n
String sql; )gR3S%Ju
Statement sm = cn.createStatement(); dt>!=<|k
sm.executeQuery(sql); // 执行数据查询语句(select) Z%-uyT@a
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); 6|Rj
YX
2)用PreparedStatement来执行sql语句 brn>FFAwO
String sql; ~3Z(0gujD
sql = "insert into user (id,name) values (?,?)"; Xn<|6u
PreparedStatement ps = cn.prepareStatement(sql); D{t0OvQag
ps.setInt(1,xxx); h!hv{c
ps.setString(2,xxx); +hT9V1'-D
... 5'0kf7
ResultSet rs = ps.executeQuery(); // 查询 >R/^[([;]
int c = ps.executeUpdate(); // 更新 r^\Wo7q
0wETv
3、处理执行结果 D>wo>,G
查询语句,返回记录集ResultSet .B$3y#TOb
更新语句,返回数字,表示该更新影响的记录数 Ujly\ix`
ResultSet的方法 %N<>3c<8P
1、next(),将游标往后移动一行,如果成功返回true;否则返回false C|ou7g4'p
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 \ItAc2,Fl
~1{~iB2G
4、释放连接 o{|
|Ig
cn.close(); MD+eLA7
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection PzLV}
-1!s8G
可滚动、更新的记录集 ;u%4K$
1、创建可滚动、更新的Statement 3'`X_C|d53
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); -g vS3`lX
该Statement取得的ResultSet就是可滚动的 eR8>5:V_
2、创建PreparedStatement时指定参数 K*MI8')
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); z<<aT
ResultSet.absolute(9000); fli7Ow?M~
批量更新 l}Vg;"1'J
1、Statement 5g4c1K
Statement sm = cn.createStatement(); jmnrpXaAx
sm.addBatch(sql1); 5YiBw|Z7 "
sm.addBatch(sql2); N<lf,zGw
... "\1V^2kMr
sm.executeBatch() >LB x\/
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 h6Hop mWVx
2、PreparedStatement odq3@
ziO
PreparedStatement ps = cn.preparedStatement(sql); l_=kW!l
{ gem+$TFq
ps.setXXX(1,xxx); n<sA?T
... h1?.x
ps.addBatch(); ]h&?^L<.
} Hkj|
e6
ps.executeBatch(); nHF
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 $Jj0%?;
Tb]' b
事务的处理 SB!m&;Tb
1、关闭Connection的自动提交 o&:n>:im
cn.setAutoCommit(false); %PU{h
2、执行一系列sql语句 >qIZ
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close KTu&R6|
Statement sm ; a<V* )
sm = cn.createStatement(insert into user...); V -9z{
sm.executeUpdate(); qS2]|7q?Tc
sm.close(); xZ&S7G1