java 数据库基本操作 DX
K?Cv71z
1、java数据库操作基本流程 .+A+|yR
2、几个常用的重要技巧: T <ET
)D7
可滚动、更新的记录集 &AbNWtCV+G
批量更新 *.d)OOpLo
事务处理 \ Et3|Iv
oHn
Ky[1
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接
=.]4;z
1、取得数据库连接 SmSH2m-
1)用DriverManager取数据库连接 U/l&tmIVY
例子 'Xq|Kf (
String className,url,uid,pwd; X))/ m[_[
className = "oracle.jdbc.driver.OracleDriver"; <s<n
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; KEjWRwN
uid = "system"; O5nD+qTQ#
pwd = "manager"; .MoU1n{Yc
Class.forName(className); RO/FF<f
Connection cn = DriverManager.getConnection(url,uid,pwd); GH:jH]u!V
2)用jndi(java的命名和目录服务)方式 {go;C}
例子 Xg!{K3OS
String jndi = "jdbc/db";
MC.)2B7
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); C
mWgcw1
DataSource ds = (DataSource) ctx.lookup(jndi); V7fq4O^:
Connection cn = ds.getConnection(); ::{Q1F
多用于jsp中 2?ez,*-[
2、执行sql语句 UIN<2F_
1)用Statement来执行sql语句 hAnPXiD
String sql;
>rKIG~P_
Statement sm = cn.createStatement(); !0L Wa"
sm.executeQuery(sql); // 执行数据查询语句(select) =QiI :|eRA
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); mQ26K~
2)用PreparedStatement来执行sql语句 (b-MMr
String sql; c>:wd@w
sql = "insert into user (id,name) values (?,?)"; 9} M?P
PreparedStatement ps = cn.prepareStatement(sql); Hp!-248 S
ps.setInt(1,xxx); k],Q9
ps.setString(2,xxx); rgtT~$S
... =BAW[%1b
ResultSet rs = ps.executeQuery(); // 查询 0e ~JMUb
int c = ps.executeUpdate(); // 更新 ,,Q O^j]4~
3/e.38m|
3、处理执行结果 7XLtN "$$
查询语句,返回记录集ResultSet -Xm'dwm
更新语句,返回数字,表示该更新影响的记录数 RF4vtQC=
ResultSet的方法 9FYUo
1、next(),将游标往后移动一行,如果成功返回true;否则返回false tKx~1-
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 gS]@I0y8
.
ZWU)\}}_R
4、释放连接 n QZwC
cn.close(); ,I(d6
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection /quc}"__
`yXg{lk
可滚动、更新的记录集 }DfshZ0QM
1、创建可滚动、更新的Statement e9 5Lo+:f
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); O-GJ-
该Statement取得的ResultSet就是可滚动的 &LZn
FR
2、创建PreparedStatement时指定参数 /saIs%(fU
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); ?5|>@>
ResultSet.absolute(9000); Pz |>"'
批量更新 tla
5B_
1、Statement (G4at2YLd
Statement sm = cn.createStatement(); Ed,~1GanY
sm.addBatch(sql1); {19PL8B~}
sm.addBatch(sql2); ju8q?Nyhs
... bj0G5dc=
sm.executeBatch() A _
N;
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 0c'<3@39k|
2、PreparedStatement KNpl:g3{<Q
PreparedStatement ps = cn.preparedStatement(sql); yyRiP|hJ
{ Ln<`E|[29
ps.setXXX(1,xxx); =eXU@B
... A) %/[GD2
ps.addBatch(); )j(7]uX`
} L Mbn
ps.executeBatch(); [{<`o5qR
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 [-k
D] jzAx
事务的处理 lVR~Bh
1、关闭Connection的自动提交 _j/<{vS y
cn.setAutoCommit(false); #TX/aKr:
2、执行一系列sql语句 E+R1 !.
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close )Y6 +
Statement sm ; i6tf2oqO7
sm = cn.createStatement(insert into user...); o_Z5@F
sm.executeUpdate(); K&Z