java 数据库基本操作 XH_XGzBQS
1、java数据库操作基本流程 iNn]~L1
2、几个常用的重要技巧: |a7W@LVYD
可滚动、更新的记录集 u)]]9G
_8
批量更新 Z83A1`!.|
事务处理 }cov"o
6\MH2&L<
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 a!Z.ZA
1、取得数据库连接 5,3Yt ~\m
1)用DriverManager取数据库连接 Ij +
E/V
例子 q9GSUkb
String className,url,uid,pwd; Rj&V~or
className = "oracle.jdbc.driver.OracleDriver"; 35}{dr
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; %1E:rw@
uid = "system"; 0/".2(\}T
pwd = "manager"; OGgP~hd
Class.forName(className); Tk[`kmb
Connection cn = DriverManager.getConnection(url,uid,pwd); y6.Q\=
2)用jndi(java的命名和目录服务)方式 ,L iX
例子
de.!~%D
String jndi = "jdbc/db"; %kM|Hk3d
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); k)VoDxMKK
DataSource ds = (DataSource) ctx.lookup(jndi); k5]M~"
Connection cn = ds.getConnection(); ich\`j[i
多用于jsp中 cR0+`&
2、执行sql语句 K OZHz`1!
1)用Statement来执行sql语句 =yn|.%b
String sql; <I}O_:%
Statement sm = cn.createStatement(); vA(V.s`
sm.executeQuery(sql); // 执行数据查询语句(select) .8[Db1W
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); +bi%4DA
2)用PreparedStatement来执行sql语句 EeW %5/;
String sql; 4%h@K(iN
sql = "insert into user (id,name) values (?,?)"; P<AN`un
PreparedStatement ps = cn.prepareStatement(sql); 1BQB8i-,
ps.setInt(1,xxx); m"MTw@}SJ;
ps.setString(2,xxx); ^4Ta0kDn
... o$k1&hyH
ResultSet rs = ps.executeQuery(); // 查询 IuJj;L1
int c = ps.executeUpdate(); // 更新 0~qnwe[g}
%<x2=#0
3、处理执行结果 /\=syl
查询语句,返回记录集ResultSet SKx&t-
更新语句,返回数字,表示该更新影响的记录数 F-MN%WD~
ResultSet的方法 ekB!d
1、next(),将游标往后移动一行,如果成功返回true;否则返回false a?]Ow J
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 'je=.{[lWt
7<W7pXDp
4、释放连接 <VB;J5Rv
cn.close(); xngK_n
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection zY@|KV"^r
1b)^5U ;
可滚动、更新的记录集 B dHLow
1、创建可滚动、更新的Statement ulM6R/V:?
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); vi+k#KE
该Statement取得的ResultSet就是可滚动的 92}UP=RW!
2、创建PreparedStatement时指定参数 a0y7a/@c
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); V,=V
ResultSet.absolute(9000); F<wwuCbF
批量更新 &lg+uK
1、Statement K2J DG.<
Statement sm = cn.createStatement(); 6PETIs
sm.addBatch(sql1); +we3BE.
sm.addBatch(sql2); p9*#{~
... !(=bH"P
sm.executeBatch() b[<Q_7~2
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 v#EXlpS
2、PreparedStatement =i jGB~
PreparedStatement ps = cn.preparedStatement(sql);
r"s
<;
{ $i@~$m7d-
ps.setXXX(1,xxx); s'yA^
VPf
... 2"
(vjnfH
ps.addBatch(); ] -O/{FIv
} F?]nPb|
ps.executeBatch(); ejYJOTT{^
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 i*`; /x'+
2+pLDIIT
事务的处理 Gq4~9Tm)*
1、关闭Connection的自动提交 FyuCYg
\p
cn.setAutoCommit(false); @}&o(q1M0
2、执行一系列sql语句 Z_&6<1,H
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close " $5J7
Statement sm ; 8NLTq|sW
sm = cn.createStatement(insert into user...); }a= &o6=
sm.executeUpdate(); /`yb75
sm.close(); =k]Rze I
sm = cn.createStatement("insert into corp...); _aOisN{
sm.executeUpdate(); 0*?~I;.2m$
sm.close(); N~H9|CX
3、提交 r0=Aru5n
cn.commit(); T9enyYt%
4、如果发生异常,那么回滚 "T4Z#t
cn.rollback();