java 数据库基本操作 p3]_}Y
D[#
1、java数据库操作基本流程 %CS@g.H=_
2、几个常用的重要技巧: ]xX$<@HR
可滚动、更新的记录集 0KMctPT]p
批量更新 9Xl`pEhC
事务处理 y]J89
WcHgBbNe
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 eFpTW&9n
1、取得数据库连接 #ggf' QIHp
1)用DriverManager取数据库连接 kqce[hgs<
例子 #<e\QE'!
String className,url,uid,pwd; ZKQG:M~|
className = "oracle.jdbc.driver.OracleDriver"; @;<ht c
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; jV?
}9L^;
uid = "system"; PQK(0iCo4
pwd = "manager"; k]5Bykf`Ky
Class.forName(className); z;A>9vQ_J
Connection cn = DriverManager.getConnection(url,uid,pwd); Vs%|pIV
2)用jndi(java的命名和目录服务)方式 QmLF[\Oo_
例子 .A-]_98Z
String jndi = "jdbc/db"; SfJ./ny
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); }?z@rt^
DataSource ds = (DataSource) ctx.lookup(jndi); 0Z0:,!
Connection cn = ds.getConnection(); 8zA=;~GHP
多用于jsp中 ({JHZ6uZ
2、执行sql语句 TjQvAkT
1)用Statement来执行sql语句 ,WJH}(h"D
String sql; io#&o;M<
Statement sm = cn.createStatement(); TjHwjRa
sm.executeQuery(sql); // 执行数据查询语句(select) nBHnkbKoy
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); UW9?p}F
2)用PreparedStatement来执行sql语句 3}@_hS"^8
String sql; iC W*]U
sql = "insert into user (id,name) values (?,?)"; 6oLwfTy
PreparedStatement ps = cn.prepareStatement(sql); (9<guv
ps.setInt(1,xxx); Q$:; } ~"hC3w
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection 0pJ
":Q/2)
ZTU&,1Y ;
可滚动、更新的记录集 rAs,X
1、创建可滚动、更新的Statement QHWBAGA
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); VxY+h`4#
该Statement取得的ResultSet就是可滚动的 (y?ITz9
2、创建PreparedStatement时指定参数 =QK$0r]c'k
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); wMdal:n^
ResultSet.absolute(9000); GrTulN?
批量更新 6I!7c^]t
1、Statement :=8t"rO=W
Statement sm = cn.createStatement(); c%[#~;E
sm.addBatch(sql1); ithewup
sm.addBatch(sql2); /F4pb]U!*
... [74F6Qp
sm.executeBatch() H(Q.a=&4!p
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 w.lAQ5)I%\
2、PreparedStatement =xNv\e
PreparedStatement ps = cn.preparedStatement(sql); /Nr*`l
{ hgLj<
ps.setXXX(1,xxx); ?{U
m
... 0 H0-U'l
ps.addBatch(); 5Q 'i2*j
} zfwS
ps.executeBatch(); &BtK($
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 N.4q.
549jWG
事务的处理 ?Q-h n:F)
1、关闭Connection的自动提交 mk3_
cn.setAutoCommit(false); /;tPNp{!dw
2、执行一系列sql语句 wWSdTLX
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close K{ \;2M
Statement sm ; aB]m*~
sm = cn.createStatement(insert into user...); "Vr[4&`
sm.executeUpdate(); ]D@0|
sm.close(); l#lF
+Q;
sm = cn.createStatement("insert into corp...); &q`q4g&7
sm.executeUpdate(); A8q;q 2
sm.close(); 2MATpV#BT
3、提交 0vVV%,v
cn.commit(); {0;3W7
4、如果发生异常,那么回滚 iSFuT7;%
cn.rollback();