java 数据库基本操作 ;W+-x]O
1、java数据库操作基本流程 fBLd5
2、几个常用的重要技巧: *i?qOv/=>
可滚动、更新的记录集 ?*s!&-KI
批量更新 _@OYC<
事务处理 yX~[yH+Pn
m~U{ V9;*
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 F>b6fUtR
1、取得数据库连接 Uqpvj90sw
1)用DriverManager取数据库连接 0&nF Vsz
例子 654%X(:q
String className,url,uid,pwd; ;Z`)*TRp4
className = "oracle.jdbc.driver.OracleDriver"; |Gf{ }
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; {f&ga
uid = "system"; _uu:)%
pwd = "manager"; wwAT@=X*}
Class.forName(className); iE Oyc59
Connection cn = DriverManager.getConnection(url,uid,pwd); B7 PmG
f)b
2)用jndi(java的命名和目录服务)方式 .-|O "H$
例子 7}x-({bqy
String jndi = "jdbc/db"; )ED[cYGx
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); PjP%,-@1
DataSource ds = (DataSource) ctx.lookup(jndi); =0)^![y]v
Connection cn = ds.getConnection(); xqtjtH9X
多用于jsp中 XGoy#h
2、执行sql语句 zc1Zuco|
R
1)用Statement来执行sql语句 6+u'Tcb
String sql; d$TW](Bby
Statement sm = cn.createStatement(); $F-XXBp
sm.executeQuery(sql); // 执行数据查询语句(select) PW`Tuj
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); jFXU
xf
2)用PreparedStatement来执行sql语句 *@&
"MZ/M
String sql; \fz
j fZ1n
sql = "insert into user (id,name) values (?,?)"; 5VTbW
PreparedStatement ps = cn.prepareStatement(sql); []]3"n
ps.setInt(1,xxx); @
tIB'|O
ps.setString(2,xxx); `@eH4}L*
... w?tKL0c
ResultSet rs = ps.executeQuery(); // 查询 vvM)Rb,
int c = ps.executeUpdate(); // 更新 0l=}v%D
EC~t'v
3、处理执行结果 ;9PM?Iy[
查询语句,返回记录集ResultSet vRq xZN
更新语句,返回数字,表示该更新影响的记录数 0c5_L6_z
ResultSet的方法 O%&@WrFq
1、next(),将游标往后移动一行,如果成功返回true;否则返回false dvD<>{U,8
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 eI}VH BAz
HIq1/)
4、释放连接 ]2(c$R
cn.close(); eFio,
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection @(cS8%wK
xB(:d'1|
可滚动、更新的记录集 x]ti3?w
1、创建可滚动、更新的Statement 6b/b}vl
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); ':V_V. :
该Statement取得的ResultSet就是可滚动的 wF uh6!J
2、创建PreparedStatement时指定参数 `+.I
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); K8J2eV\
ResultSet.absolute(9000); ~&}O|B()
批量更新 2f!oA~|2
1、Statement YP<]f>SBt
Statement sm = cn.createStatement(); ~qS/90,
sm.addBatch(sql1); jEsTw_
sm.addBatch(sql2); MQ*#oVqv
... DH
!Br
sm.executeBatch() S
|x)7NC
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 0'hx w3#
2、PreparedStatement \Wc/kY3&
PreparedStatement ps = cn.preparedStatement(sql); >y9o&D