java 数据库基本操作 ~U~KUL|
1、java数据库操作基本流程 Cb x/
2、几个常用的重要技巧: *]W{83rXQ
可滚动、更新的记录集 w/~,mzM"
批量更新 => )l6**UE
事务处理 \n6#D7OV
9p+DAs{i
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 CbS- Rz:
1、取得数据库连接 D;.-e
1)用DriverManager取数据库连接 n0>#?ek12
例子 9y>dDNM\<
String className,url,uid,pwd; GBHv| GO
className = "oracle.jdbc.driver.OracleDriver"; b5No>U) /
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; CS:j->
uid = "system"; 1bYc^(z0
pwd = "manager"; ['tGc{4
Class.forName(className);
J5*krH2i
Connection cn = DriverManager.getConnection(url,uid,pwd); g.SFl
2)用jndi(java的命名和目录服务)方式 (}V.xi
例子 '.c[7zL
String jndi = "jdbc/db"; Ldf<
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); rt_%_f>qd
DataSource ds = (DataSource) ctx.lookup(jndi); |XtN\9V.
Connection cn = ds.getConnection(); !X`
5
多用于jsp中 SBzJQt@Hs
2、执行sql语句 W[AX?
1)用Statement来执行sql语句 8jMw7ti
String sql; %qV=PC
Statement sm = cn.createStatement(); 4sP0oe[h
sm.executeQuery(sql); // 执行数据查询语句(select) PL@hsZty~c
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); vCb3Ra~L`
2)用PreparedStatement来执行sql语句 )%- FnW
String sql; ]p\7s
sql = "insert into user (id,name) values (?,?)"; )U`6` &F
PreparedStatement ps = cn.prepareStatement(sql); \5_+6
ps.setInt(1,xxx); 3 i Id>
ps.setString(2,xxx); Q0#oR[(
... Dwj!B;AZ_
ResultSet rs = ps.executeQuery(); // 查询 "|{NRIE
int c = ps.executeUpdate(); // 更新 (Dlh;Ic
r9
$.a<b^.Xi
3、处理执行结果 o:.={)rX
查询语句,返回记录集ResultSet 5@%$M$E
更新语句,返回数字,表示该更新影响的记录数 MT[V1I{LV
ResultSet的方法 sG=D(n1
1、next(),将游标往后移动一行,如果成功返回true;否则返回false ?w#V<3=
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 ^vn8s~#
yS[:C
2v
4、释放连接 0BMKwZg
cn.close(); sX.L
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection EeIV6ug
)D{L<.i_
可滚动、更新的记录集 b^~ keQ
1、创建可滚动、更新的Statement A5S9F8Q/]
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); 1p[C5j3
该Statement取得的ResultSet就是可滚动的 64%P}On
2、创建PreparedStatement时指定参数 aHNR0L3$}{
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); ]>tYU
ResultSet.absolute(9000); 0M7Or)qN
批量更新 (#k>cA(}
1、Statement )e d5~ok
Statement sm = cn.createStatement(); H!?Av$h`
sm.addBatch(sql1); x4r8^,K3Zn
sm.addBatch(sql2); ;PCnEs
... NoTEbFrV
sm.executeBatch() Se.\wkl#Y
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 #k&"Rv;,
2、PreparedStatement VCSHq&p8
PreparedStatement ps = cn.preparedStatement(sql); i ?&t@"'
{ twv|,kM
ps.setXXX(1,xxx); 48hu=,)81*
... =iW!Mq
ps.addBatch(); j]U sb_7
} 29("gB
ps.executeBatch(); }TY}sr
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 QkS~~|0EI>
&_Z