java 数据库基本操作 H,<CR9@(5d
1、java数据库操作基本流程 47Vt8oyh%
2、几个常用的重要技巧: '`k
可滚动、更新的记录集 ommW
批量更新 c1kV}-v
事务处理 (XR}U6^v]
8Y%
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 2FdwX,O.
1、取得数据库连接 /Q W^v;^
1)用DriverManager取数据库连接 $'}| /D
例子 xBc$qjV
String className,url,uid,pwd; 2.JrLBhN
className = "oracle.jdbc.driver.OracleDriver"; %o/@0.w
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; xK0;saG#
uid = "system"; [Cd#<Te3
pwd = "manager"; RPMz&/k
Class.forName(className); Xgh%2;:
Connection cn = DriverManager.getConnection(url,uid,pwd); qPi $kecx
2)用jndi(java的命名和目录服务)方式 p]X+#I<
例子 Nq9pory^
String jndi = "jdbc/db"; )6XnxBSH
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); m.6uLaD"!}
DataSource ds = (DataSource) ctx.lookup(jndi); Ib2&L
Connection cn = ds.getConnection(); m; =S]3P*
多用于jsp中 c>c3qjWY/
2、执行sql语句 nzxHd7NIZ
1)用Statement来执行sql语句 !p ~.Y+
String sql; M`#g>~bI#R
Statement sm = cn.createStatement(); #2\M(5d
sm.executeQuery(sql); // 执行数据查询语句(select) Y&M {7
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); x-@?:P*
2)用PreparedStatement来执行sql语句 6(\-aH'Ol
String sql; G~_eBy
sql = "insert into user (id,name) values (?,?)"; ;[lLFI
PreparedStatement ps = cn.prepareStatement(sql); G,6`:l
ps.setInt(1,xxx); |CQjgI|;
ps.setString(2,xxx); +R$;LtR
... k^JgCC+
ResultSet rs = ps.executeQuery(); // 查询 G@e;ms1
int c = ps.executeUpdate(); // 更新 EhD%
h`Ej>O7m
3、处理执行结果 QHXpX9
查询语句,返回记录集ResultSet _eQ-'")
更新语句,返回数字,表示该更新影响的记录数 b* n#XTV
ResultSet的方法 MS2/<LD3d
1、next(),将游标往后移动一行,如果成功返回true;否则返回false wBI:}N@.
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 IN;!s#cl:
UC`sq-n
4、释放连接 CXu$0DQ(
cn.close(); ,:
z]15fX
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection Grw[h
2fayQY
xD
可滚动、更新的记录集 W7s
1、创建可滚动、更新的Statement <b4}
B
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); _;x` 6LM
该Statement取得的ResultSet就是可滚动的 f[`&3+
2、创建PreparedStatement时指定参数 ~6u|@pnI
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); ?TDmW8G}J
ResultSet.absolute(9000); O d6'bO;G
批量更新 x5#Kk.
1、Statement (0_]=r=q
Statement sm = cn.createStatement(); jA@
uV,w
sm.addBatch(sql1); MD;,O3Ge
sm.addBatch(sql2); &H,UWtU+
... mWoN\Rwj
sm.executeBatch() )abH//Pps.
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 lZ"C~B}9:I
2、PreparedStatement '&|%^9O/"
PreparedStatement ps = cn.preparedStatement(sql); &B+_#V=X@
{ p&xj7qwp@F
ps.setXXX(1,xxx); SRHD"r^@
... f/kYm\Zc
ps.addBatch(); #~rQ\A!4
} 7k#>$sY+
ps.executeBatch(); ;$*tn"- ?~
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 KB\ri&bF
v-F|#4Q=ut
事务的处理 D!)h92CIDm
1、关闭Connection的自动提交 SoCN.J30
cn.setAutoCommit(false); Efd@\m:~>
2、执行一系列sql语句 I?q-
:9:
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close J1r\Cp+h0
Statement sm ; q?w%%.9]X
sm = cn.createStatement(insert into user...); Jn&u