java 数据库基本操作 I&^hG\D
1、java数据库操作基本流程 `6NcE-oJ
2、几个常用的重要技巧: 8{&.[SC7
可滚动、更新的记录集 |w>b0aY
批量更新 @,G\`;Ma
事务处理 xA*6Z)Y
Cz&t*i/
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 ]-+l.gVFW
1、取得数据库连接 9RK.+2
1)用DriverManager取数据库连接 'w/S6j
例子 -\Z`+k Y?p
String className,url,uid,pwd; 7^#O{QYol
className = "oracle.jdbc.driver.OracleDriver"; cxPO O#
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; Z;dR:|%)
uid = "system"; 3^)c5kcI
pwd = "manager"; #>z !ns
Class.forName(className); ;<F^&/a|yQ
Connection cn = DriverManager.getConnection(url,uid,pwd); `lbRy($L
2)用jndi(java的命名和目录服务)方式 Cf
v1nUW
例子 NUuIhB+
String jndi = "jdbc/db"; ).tTDZ
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); z_(4
DataSource ds = (DataSource) ctx.lookup(jndi); l['ER$(7
Connection cn = ds.getConnection(); f$?`50D"1
多用于jsp中 cw_B^f8^
2、执行sql语句 5RF*c,cNq
1)用Statement来执行sql语句 6OtNWbB
String sql; 2c*}1
_
Statement sm = cn.createStatement(); R3#| *)q
sm.executeQuery(sql); // 执行数据查询语句(select) M@pF[J/
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); 1:{+{Yl7
2)用PreparedStatement来执行sql语句 kFfNDM#D
String sql; x|Ms2.!
sql = "insert into user (id,name) values (?,?)"; M pz9}[`3g
PreparedStatement ps = cn.prepareStatement(sql); +5:9?&lH
ps.setInt(1,xxx); {s2eOL5I|%
ps.setString(2,xxx); ki?V
eFp
... c11;(
ResultSet rs = ps.executeQuery(); // 查询 MTbCL53!-
int c = ps.executeUpdate(); // 更新 kWCxc0
qE6D"+1y7
3、处理执行结果 {JfL7%
查询语句,返回记录集ResultSet D3+<16[,
更新语句,返回数字,表示该更新影响的记录数 ,GtN6?
ResultSet的方法 MiMDEe%f%
1、next(),将游标往后移动一行,如果成功返回true;否则返回false EgOiJH
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 W7\UZPs5t
4Ub7T=LG
4、释放连接 aMxM3"
cn.close(); w)>/fG|;
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection WjvgDNk
6x16?x
可滚动、更新的记录集 DeQZDY //
1、创建可滚动、更新的Statement hXc:y0
0
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); 8(!?y[
该Statement取得的ResultSet就是可滚动的 h~Z:YY)4
2、创建PreparedStatement时指定参数 ^jk-GRD*
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); rFW,x_*_vP
ResultSet.absolute(9000); Ma ]*Pled
批量更新 YgQb(umK
1、Statement y@ c[S;
Statement sm = cn.createStatement(); tR?)C=4,
sm.addBatch(sql1); {CgF{7`
sm.addBatch(sql2); U6YQ*%mZ_
... \.=,}sV2Z
sm.executeBatch() L~Xzo
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 :M@#.
2、PreparedStatement X09i+/ICK
PreparedStatement ps = cn.preparedStatement(sql); Ol8Yf.e_
{ pO N@
ps.setXXX(1,xxx); Z..s /K{
... 7K24sHw;%
ps.addBatch(); :SN/fY
} &