java 数据库基本操作 q3+G
1、java数据库操作基本流程 b`x7%?Qn
2、几个常用的重要技巧: 9fk@C /$
可滚动、更新的记录集 #[.vfG
批量更新 'qGKS:8
事务处理 Y2&>;ym!
czMu<@c [
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 bFivHms
1、取得数据库连接 8.Q;o+NU
1)用DriverManager取数据库连接 f1cQ*#2~
例子 %s.hqr,I
String className,url,uid,pwd; g+5{&YD
className = "oracle.jdbc.driver.OracleDriver"; zzf;3S?
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; k+X=8()k
uid = "system"; =[wVRQ?
pwd = "manager"; yY,O=yOjq
Class.forName(className); ("2ukHc
Connection cn = DriverManager.getConnection(url,uid,pwd); H*#L~!]
2)用jndi(java的命名和目录服务)方式 @"M%ZnFu
例子 Qo*,2B9R L
String jndi = "jdbc/db"; BMw_F)hTO
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); sE*A,z?
DataSource ds = (DataSource) ctx.lookup(jndi); 6S-1Wc4
Connection cn = ds.getConnection(); X#l]%IrW!
多用于jsp中 b 9M.p*!
2、执行sql语句 Q'f!392|
1)用Statement来执行sql语句 1WGcv O)<
String sql; V=<OV]0
Statement sm = cn.createStatement(); HGuY-f
sm.executeQuery(sql); // 执行数据查询语句(select) m'Jk!eo
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); +\SNaq~&
2)用PreparedStatement来执行sql语句 I }AO_rtb
String sql; ;#np~gL
sql = "insert into user (id,name) values (?,?)"; zd)2@jX=
PreparedStatement ps = cn.prepareStatement(sql); 't2dP,u<-
ps.setInt(1,xxx); \3P.G S{l
ps.setString(2,xxx); k+xj 2)d7
... O'5d6m
ResultSet rs = ps.executeQuery(); // 查询 "=l<%em
int c = ps.executeUpdate(); // 更新 P;%4Imq3
7aH E:Dnwp
3、处理执行结果 d4"KM+EP?
查询语句,返回记录集ResultSet 3kxI'0&T
更新语句,返回数字,表示该更新影响的记录数 D]+0X8@kH7
ResultSet的方法
kyQUaFG
1、next(),将游标往后移动一行,如果成功返回true;否则返回false v#iKa+tx
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 x:TBZh?@$
zk+&5d4(
4、释放连接 */gm! :Ym
cn.close(); DAs&4Y`
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection 9Y:JA]U&8
GO@pwq<
可滚动、更新的记录集 l~.}#$P]
1、创建可滚动、更新的Statement x`'2oz=,F4
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); pWo`iM& F
该Statement取得的ResultSet就是可滚动的 5t6!K?}
2、创建PreparedStatement时指定参数 3L24|-GxH
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); &5&C
ResultSet.absolute(9000); JTcK\t8
批量更新 yVe<[!hJ
1、Statement ebk{p<
Statement sm = cn.createStatement(); xk}(u`:.
sm.addBatch(sql1); xNG'UbU
sm.addBatch(sql2); ".&x`C
... WNkAI9B
sm.executeBatch() qzv$E;zAl
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 g%z?O[CN
2、PreparedStatement uq;,h46ki
PreparedStatement ps = cn.preparedStatement(sql); H \$04vkR
{ kc&