java 数据库基本操作
{{)[Ap)
1、java数据库操作基本流程 ~^5n$jq
2、几个常用的重要技巧: 3usA
可滚动、更新的记录集 z&J ow/
批量更新 :W<,iqSCm
事务处理 WHj4#v(
C-b% PgA
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 #1hz=~YO
1、取得数据库连接 .AI'L|FQ%c
1)用DriverManager取数据库连接 [^BUhm3a
例子 TOF62,
String className,url,uid,pwd; 3V!&y/c<
className = "oracle.jdbc.driver.OracleDriver"; D$!p+Q
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; +T-zf@j
uid = "system"; &Or=_5Y`
pwd = "manager";
G#n)|p
Class.forName(className); U.sPFt
Connection cn = DriverManager.getConnection(url,uid,pwd); T9v#Jb6
2)用jndi(java的命名和目录服务)方式 fy-Z{
例子 j I@$h_n
String jndi = "jdbc/db"; ?RAR
Context ctx = (Context) new InitialContext().lookup("java:comp/env");
o*ED!y7
DataSource ds = (DataSource) ctx.lookup(jndi); 8q[WfD
Connection cn = ds.getConnection(); zZ0V6T}
多用于jsp中 r@ *A
2、执行sql语句 92ww[+RQ@
1)用Statement来执行sql语句 1?$!y
String sql; 7tO$'q*h
Statement sm = cn.createStatement(); nVA'O
sm.executeQuery(sql); // 执行数据查询语句(select) 2o}G<7r
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); Nc Mq>n
2)用PreparedStatement来执行sql语句 ,
p=8tf#
String sql; IMw)X0z
sql = "insert into user (id,name) values (?,?)"; $P9$ ,w4
PreparedStatement ps = cn.prepareStatement(sql); 6i=wAkn_J
ps.setInt(1,xxx); pXEVI6 }
ps.setString(2,xxx); V~"d`j
... Z8n%=(He
ResultSet rs = ps.executeQuery(); // 查询 >} (*s^!k
int c = ps.executeUpdate(); // 更新 :q[n1
O[Ch
r&~iEO|?\
3、处理执行结果 9NXiCP9A
查询语句,返回记录集ResultSet d?X6x
更新语句,返回数字,表示该更新影响的记录数 tpzdYokh>
ResultSet的方法 RKb3=}
*C
1、next(),将游标往后移动一行,如果成功返回true;否则返回false m)2hl~o_
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 wyEgm:Vt
q x }fn/:
4、释放连接 0c6AQP"=V
cn.close(); $5(%M8qmQ
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection }ucg!i3C
`%I{l
可滚动、更新的记录集 ##ea-"m8
1、创建可滚动、更新的Statement t|"d#5'
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); ;9\0x
该Statement取得的ResultSet就是可滚动的 Nmq5Tv
2、创建PreparedStatement时指定参数 mzR
@P$:36
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); d"a7{~l
ResultSet.absolute(9000); 7%}}m&A7h
批量更新 uy\+#:44d
1、Statement Z"KuS
Statement sm = cn.createStatement(); MpvA--
sm.addBatch(sql1); !h(0b*FUJ
sm.addBatch(sql2); UimZ/\r
... ~?+m=\
sm.executeBatch() ~i#xjD5
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 l:/V%{sx
2、PreparedStatement )% c)-c
PreparedStatement ps = cn.preparedStatement(sql); CrQ&-!Eh
{ 9@+X?Nhv5
ps.setXXX(1,xxx); ^Exq=oV
... e(N <Mf
ps.addBatch(); u`nn{C4D"
} jM<Ihmh|
ps.executeBatch(); 7B :aJfxM
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 -^"?a]B
?q&mI* j!
事务的处理 ," R_ve
1、关闭Connection的自动提交 ~[,TLg
6
cn.setAutoCommit(false); J0plQDe
2、执行一系列sql语句 \{mJO>x
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close &<