java 数据库基本操作 Q%G8U#Tm
1、java数据库操作基本流程 f6Ah6tb
2、几个常用的重要技巧: FZlWsp=
可滚动、更新的记录集 u6agoK|^9
批量更新 h]gp ^?=
事务处理 n>YKa)|W`
NLqzi%s
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 da(<K}
1、取得数据库连接 PZ9I`P!C
1)用DriverManager取数据库连接 tsjrRMR
例子 cwg"c4V
String className,url,uid,pwd; z:*|a+cy
className = "oracle.jdbc.driver.OracleDriver"; H{wl% G
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; L4HI0Mx
uid = "system"; /4Gt{ygSr
pwd = "manager"; jLluj
Class.forName(className); R/YqyT\SM
Connection cn = DriverManager.getConnection(url,uid,pwd); 5]0<9a
2)用jndi(java的命名和目录服务)方式 %h@EP[\
例子 &8lZNv8;(p
String jndi = "jdbc/db"; e7 o.xR
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); y)@wjH{6
DataSource ds = (DataSource) ctx.lookup(jndi); K0>zxqY
Connection cn = ds.getConnection(); yN-9[P8C
多用于jsp中 0(HU}I
2、执行sql语句 f:}
x7_Q
1)用Statement来执行sql语句 sgFEK[w.y
String sql; "to;\9lP
Statement sm = cn.createStatement(); ]a`$LW}
sm.executeQuery(sql); // 执行数据查询语句(select) 0 H:X3y+
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); WsB ?C&>x
2)用PreparedStatement来执行sql语句 U xGApK=X
String sql; * EH~_F
sql = "insert into user (id,name) values (?,?)"; 1qA;/-Zr<o
PreparedStatement ps = cn.prepareStatement(sql); M= (u]%\
ps.setInt(1,xxx); ]/v[8dS(l
ps.setString(2,xxx); ygcm|PrS
... JZx[W&]zT
ResultSet rs = ps.executeQuery(); // 查询 upmx $H>
int c = ps.executeUpdate(); // 更新 &D<y X~
o]V^};B
3、处理执行结果 F^:3?JA_
查询语句,返回记录集ResultSet 59u}W 0
更新语句,返回数字,表示该更新影响的记录数 ]-#DB^EQ
ResultSet的方法 uY To9A
1、next(),将游标往后移动一行,如果成功返回true;否则返回false z$sT !QL~
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 9 68Ez
Pq$n5fZC!
4、释放连接 1% ` Rs
cn.close(); ?r4>" [
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection 5 qA'
|G<|F`Cj
可滚动、更新的记录集 ccxNbU
1、创建可滚动、更新的Statement
0y\Z9+G:
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); i%?* @uj
该Statement取得的ResultSet就是可滚动的
YmG("z
2、创建PreparedStatement时指定参数 }GM'.yutX
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); (ZlU^Gw#UB
ResultSet.absolute(9000); z1a7*)8P
批量更新 -9?]IIVb
1、Statement QT}tvm@PMq
Statement sm = cn.createStatement(); <P<z N~i9j
sm.addBatch(sql1); 5^ Zg>I
sm.addBatch(sql2); 4xj4=C~i
... X?Q4} Y
sm.executeBatch() h";L
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 53h0UL
2、PreparedStatement #'}*dy/
PreparedStatement ps = cn.preparedStatement(sql); :`sUt1Fw.
{ h68 xet;
ps.setXXX(1,xxx); &p,]w~d,U
... MdF2Gk-9
ps.addBatch(); $~)SCbL^5
} (8OsGn
ps.executeBatch(); 3so%gvY.'
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 l]SX@zTb
='jT~\
事务的处理 WIGi51yC.x
1、关闭Connection的自动提交 rJB}qYD
cn.setAutoCommit(false); Z_NCD`i;
2、执行一系列sql语句 6]wIG$j
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close ,esmV-
Statement sm ; ar,7S&s