java 数据库基本操作 4M*UVdJ;
1、java数据库操作基本流程 ]$KyZHj{
2、几个常用的重要技巧: 79n,bb5
可滚动、更新的记录集 ]BP"$rs
批量更新 ={~`0,
事务处理 $fPf/yQmC
~=aGv%vX
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 s+2\uMwf*
1、取得数据库连接 3cBuqQ
1)用DriverManager取数据库连接 \vT0\1:|i
例子 7h<B:~(K
String className,url,uid,pwd; m@;X%wf<U
className = "oracle.jdbc.driver.OracleDriver"; Y
6K<e:Y
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; ?9mFI (r~
uid = "system"; w [I%Id;E
pwd = "manager"; R{NmWj['Mg
Class.forName(className); (^ZC8)0i(
Connection cn = DriverManager.getConnection(url,uid,pwd); 282
m^
2
2)用jndi(java的命名和目录服务)方式 'vgw>\X(
例子 z2i?7)(?;A
String jndi = "jdbc/db"; yeFt0\=H
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); z'O$[6m6
DataSource ds = (DataSource) ctx.lookup(jndi); <:-|>R".
Connection cn = ds.getConnection(); lRi-?I|~9
多用于jsp中 #[vmS
2、执行sql语句 O(!J^J3_z
1)用Statement来执行sql语句 ?5K.#>{
String sql; gG1%.q
Statement sm = cn.createStatement(); b7E= u0
sm.executeQuery(sql); // 执行数据查询语句(select) sg;Gk/]
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); oL1m<cQo9
2)用PreparedStatement来执行sql语句 pFXDo4eH
String sql; n,hHh=.Fu
sql = "insert into user (id,name) values (?,?)"; wA|m/SZx
PreparedStatement ps = cn.prepareStatement(sql); 7G.IGXK$
ps.setInt(1,xxx); ;hA>?o_i(
ps.setString(2,xxx); 3+u11'0=t
... E)H:
L-
ResultSet rs = ps.executeQuery(); // 查询 }\|$8~
int c = ps.executeUpdate(); // 更新 ?w`uv9NUJ8
5rRYv~+
3、处理执行结果 K{B[(](
查询语句,返回记录集ResultSet C|5eV=f)P
更新语句,返回数字,表示该更新影响的记录数 sn
'#]yM
ResultSet的方法 }o0R`15dA
1、next(),将游标往后移动一行,如果成功返回true;否则返回false j#$ R.
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 w(U-6uA
51W\ %aB
4、释放连接 EpB2?XGA
cn.close(); dX-{75o5P
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection YK!nV ,
&?f{.
可滚动、更新的记录集 ^8Tq0>n?
1、创建可滚动、更新的Statement GKu@8Ol-wu
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); r&@#,g
该Statement取得的ResultSet就是可滚动的 !FX0Nx=oi
2、创建PreparedStatement时指定参数 }` E5I&r4
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); r"d/9
ResultSet.absolute(9000); "*CQ<@+
批量更新 TUHC[#Vb?
1、Statement v!27q*;8H
Statement sm = cn.createStatement(); >p [|U`>{
sm.addBatch(sql1); 8VQJUwf;
sm.addBatch(sql2); {P"$;_Y"<
...
;)s$Et%
sm.executeBatch() h}k)7
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 -'BC*fV r
2、PreparedStatement +kP)T(6
PreparedStatement ps = cn.preparedStatement(sql); CMB:%
{ VC5LxA0{
ps.setXXX(1,xxx); J@PwN^`
... 6d& dB
ps.addBatch(); CE]0OY
} _TfG-Ae
ps.executeBatch(); u&yAMWl
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 :IlRn`9X`
23?\jw3w
事务的处理 `WQz_}TqB
1、关闭Connection的自动提交 NBEcx>pma
cn.setAutoCommit(false);
F$<>JEdX
2、执行一系列sql语句 s\y+ xa:
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close M}=X/*T
Statement sm ; @[h)M3DFd
sm = cn.createStatement(insert into user...); &
9}L +/,
sm.executeUpdate(); 8dgI&t
sm.close(); j oDY
sm = cn.createStatement("insert into corp...); I4{uw ge
sm.executeUpdate(); ATl.Qku@
sm.close(); <wWZ]P2]
3、提交 #=C!Xx&
cn.commit(); 6$$4!R-
4、如果发生异常,那么回滚 z+,l"#Vv
cn.rollback();