java 数据库基本操作 )62q|c9F
1、java数据库操作基本流程 Ig='a"%
2、几个常用的重要技巧: hu`Lv
可滚动、更新的记录集 CD$u=E
]
批量更新 /7S-|%1
事务处理 oa?!50d
6Eij>{v
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 FDZeIj9uF
1、取得数据库连接 -+`az)lrp
1)用DriverManager取数据库连接 /,-h%gj
例子 knI*-
String className,url,uid,pwd; #.RG1-L
className = "oracle.jdbc.driver.OracleDriver"; QGu7D #%|
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; n^3NA|A
uid = "system"; |
3hT {
pwd = "manager"; nA|gQibA
Class.forName(className); kwDjK"
Connection cn = DriverManager.getConnection(url,uid,pwd); 1NB2y[
2)用jndi(java的命名和目录服务)方式 [ ((h<e
例子 j
P{:A9T\
String jndi = "jdbc/db"; dY4 8S{
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); `S uS)RhA)
DataSource ds = (DataSource) ctx.lookup(jndi); e@6RC bj
Connection cn = ds.getConnection(); 8b8e^\l(
多用于jsp中 z|taa;iM
2、执行sql语句 [w+yQ7P
1)用Statement来执行sql语句 9;r48)5
String sql; u)N2
Statement sm = cn.createStatement(); f]{1ZU%4
sm.executeQuery(sql); // 执行数据查询语句(select) /7!_un9
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); >;T$#LZ
2)用PreparedStatement来执行sql语句 "P>$=X~Zi
String sql; 1oXz[V
sql = "insert into user (id,name) values (?,?)"; YqK+F=0
PreparedStatement ps = cn.prepareStatement(sql); -P IA;#Gs
ps.setInt(1,xxx); Z{8exym
ps.setString(2,xxx); HMl!?%%
... iqc4O
/
ResultSet rs = ps.executeQuery(); // 查询 jb#1&L14
int c = ps.executeUpdate(); // 更新 5#N"WHz!
w%%6[<3%
3、处理执行结果 QE`:jxyad
查询语句,返回记录集ResultSet ~4p]E'b
更新语句,返回数字,表示该更新影响的记录数 VNJDl
ResultSet的方法 UeutFNp
1、next(),将游标往后移动一行,如果成功返回true;否则返回false e3oYy#QNk
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 G!>
iqG
/ynKKJx<Y
4、释放连接 >llwNT
cn.close(); ,E
n(gm
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection ZQgxrZx3
]x5(bnWx
可滚动、更新的记录集 GgZEg
?@
1、创建可滚动、更新的Statement >b/k|?xP
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); cQUH %7m
该Statement取得的ResultSet就是可滚动的 QiQ2XW\E
2、创建PreparedStatement时指定参数 C.Wms}XA
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); i`ZHjW~`
ResultSet.absolute(9000); ?[NTw./'7A
批量更新 XSL
t;zL:
1、Statement +S:u[x
Statement sm = cn.createStatement(); xIq"[?m
sm.addBatch(sql1); &+|jJ{93z
sm.addBatch(sql2); Q8M:7#ySji
... w|K(>5nz
sm.executeBatch() _7t|0aNo\
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 3.GdKP.%
2、PreparedStatement `CTkx?e[
PreparedStatement ps = cn.preparedStatement(sql); [1QkcR
{ "`8H:y
ps.setXXX(1,xxx); p:
Q%Lg_I
... TV[6+i*#
ps.addBatch(); tXb7~aO
} Sl+jduc
ps.executeBatch(); ;N> {1
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 /S2p ``E+
~Q{[fy=
事务的处理 !)l%EJngL
1、关闭Connection的自动提交 6@ (k8<3
cn.setAutoCommit(false); nEZ-h7lzl(
2、执行一系列sql语句 q:D0$YY0
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close Rd@n?qB
Statement sm ; )U/@J+{{
sm = cn.createStatement(insert into user...); fjz2m
sm.executeUpdate(); m`1}O"<&i
sm.close(); r~Is,.zZ}
sm = cn.createStatement("insert into corp...); eaZ)1od
sm.executeUpdate(); ]
_]6&PZXk
sm.close(); \V!X& a
3、提交 MU^xu&MB
cn.commit(); Fc{6*wtO
4、如果发生异常,那么回滚 [/#k$-
cn.rollback();