java 数据库基本操作 o0KL5].
1、java数据库操作基本流程 @|YH|/RF
2、几个常用的重要技巧: JT_ `.(
可滚动、更新的记录集 : eVq#3}
批量更新 A6(/;+n
事务处理 DEZveQr=
9q~s}='"
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 +ksVtG,
1、取得数据库连接 P+/e2Y
1)用DriverManager取数据库连接 tK\~A,=
例子 Ta\tYZj$
String className,url,uid,pwd; Lw>N rY(Y
className = "oracle.jdbc.driver.OracleDriver"; [` 7ThHX
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; 20Wg=p9L
uid = "system"; cyz3,3\e
pwd = "manager"; r*Ca}Z
Class.forName(className); oXF.1f/h
Connection cn = DriverManager.getConnection(url,uid,pwd); vyI!]p
2)用jndi(java的命名和目录服务)方式 )\$|X}uny&
例子 97!;.f-
String jndi = "jdbc/db"; +52{-a,>
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); U # qK.
DataSource ds = (DataSource) ctx.lookup(jndi); pFjK}JOF
Connection cn = ds.getConnection(); *J`O"a
多用于jsp中 /9fR'EO{x
2、执行sql语句 O:Tj"@h
1)用Statement来执行sql语句 Xc&9Glf
String sql; Qzw;i8n{
Statement sm = cn.createStatement(); /mzlH
sm.executeQuery(sql); // 执行数据查询语句(select) i=2N;sAl
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); Z(CkZll
2)用PreparedStatement来执行sql语句 "=Me M)K
String sql; e$rZ5X
sql = "insert into user (id,name) values (?,?)"; b d!Y\OD
PreparedStatement ps = cn.prepareStatement(sql); t"oeQ*d%
ps.setInt(1,xxx); I-l_TpM)
ps.setString(2,xxx); &{t,' [ u
... M9%$lCl
ResultSet rs = ps.executeQuery(); // 查询 5:_}zu|!u
int c = ps.executeUpdate(); // 更新 e+fN6v5pU
NK
H@+,+V
3、处理执行结果 C$`tbq
查询语句,返回记录集ResultSet 3/eca
更新语句,返回数字,表示该更新影响的记录数 j?4qO]_Wx+
ResultSet的方法 5`p.#
1、next(),将游标往后移动一行,如果成功返回true;否则返回false uoh7Sz5!^
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 ;9QEK]@
p9-K_dw3X@
4、释放连接 AFwdJte9e
cn.close(); uQKT
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection 63IM]J
a9Zq{Ysj
可滚动、更新的记录集 z+X}HL
1、创建可滚动、更新的Statement b@hqz!)l`
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); '!B&:X)
该Statement取得的ResultSet就是可滚动的 5\VWC I
2、创建PreparedStatement时指定参数 c@L< Z` u
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); U| R_OLWAg
ResultSet.absolute(9000); H0vfUF53l
批量更新 DkDmE
1、Statement l+0oS'`V*L
Statement sm = cn.createStatement(); BnF^u5kv %
sm.addBatch(sql1); 8zW2zkv2|#
sm.addBatch(sql2); =41?^1\
... <lJ345Q
sm.executeBatch() l9Q-iJ
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 ~})e?q;b
2、PreparedStatement (X*^dO
PreparedStatement ps = cn.preparedStatement(sql); 1T
n}
{ ?(_08O
ps.setXXX(1,xxx); QQc -Ya!v
... ")p\q:z6
ps.addBatch(); Z6MO^_m2
} *MW\^PR?
ps.executeBatch(); >uEzw4w
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 IO<6
="l/ klYV
事务的处理 b^vQpiz
1、关闭Connection的自动提交 )Hr`MB
cn.setAutoCommit(false); YKK*ER0
2、执行一系列sql语句 5L}/&^E#p
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close uHRsFlw
Statement sm ; S~G]~gt
sm = cn.createStatement(insert into user...); +D*Z_Yh6
sm.executeUpdate(); >9Vn.S
sm.close(); o}p n0KO,
sm = cn.createStatement("insert into corp...); QIFgQ0{
sm.executeUpdate(); .O<obq~;C
sm.close(); -jmY)(\
3、提交 ZXPX,~ 5o
cn.commit(); p!AAFmc
4、如果发生异常,那么回滚 !C.4<?*|
cn.rollback();