java 数据库基本操作 C8m8ys
1、java数据库操作基本流程 S"!nM]2L
2、几个常用的重要技巧: DQ?'f@I&*
可滚动、更新的记录集 erdWGUfQOe
批量更新 r\F`xtR(
事务处理 x&8HBF'
S=U*is
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 smoz5~
1、取得数据库连接 N>z_uPy{A
1)用DriverManager取数据库连接 zRx-xWo
例子 `$JPF Z
String className,url,uid,pwd; ((SN We
className = "oracle.jdbc.driver.OracleDriver"; 2~<?E`+
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; LR@rn2Z
uid = "system"; -|~6Zf"
pwd = "manager"; R Q X
Class.forName(className); nBgksB*A
Connection cn = DriverManager.getConnection(url,uid,pwd); |dsd5Vdr
2)用jndi(java的命名和目录服务)方式 w-Y-;*S
例子 ZL:nohB
String jndi = "jdbc/db"; _bHmcK
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); =nh/w#
DataSource ds = (DataSource) ctx.lookup(jndi); &y[Od{=
Connection cn = ds.getConnection(); j="{^b
多用于jsp中 1[
ME/r
2、执行sql语句 po}Jwx!
1)用Statement来执行sql语句 HpiP"Sl
String sql; C:"Al-
Statement sm = cn.createStatement(); P5yS`v$@
sm.executeQuery(sql); // 执行数据查询语句(select) <T>C}DGw
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); 7H:1c=U
2)用PreparedStatement来执行sql语句 I0h/x5
String sql; XkHO =
sql = "insert into user (id,name) values (?,?)"; oP$NTy[
PreparedStatement ps = cn.prepareStatement(sql); uLD%M av
ps.setInt(1,xxx); U]riBlg>
ps.setString(2,xxx); T$U,rOB"
... 5}x^0
LY
ResultSet rs = ps.executeQuery(); // 查询 wN-3@
int c = ps.executeUpdate(); // 更新 _ n,Ye&m
gI~Ru8
3、处理执行结果 (|(#~o]40t
查询语句,返回记录集ResultSet JK4vQWy
更新语句,返回数字,表示该更新影响的记录数 _Y4%Fv>@
ResultSet的方法 G1K5J`"*
1、next(),将游标往后移动一行,如果成功返回true;否则返回false Wsyq
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 x{`>Il
/XEUJC4
4、释放连接 h$)+$^YI
cn.close(); K9\`Wu_qL
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection 3R1v0
Cu3^de@h
可滚动、更新的记录集 GS_'&Yj
1、创建可滚动、更新的Statement 3Kc
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); d/vF^v*o0X
该Statement取得的ResultSet就是可滚动的 =B@owx
2、创建PreparedStatement时指定参数
k_
9gMO
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); +@ga
ResultSet.absolute(9000); CvW*/d
q
批量更新 e|Rd#
1、Statement MDGD*Qn~
Statement sm = cn.createStatement(); Z&e_yl
sm.addBatch(sql1); `h*)PitRa
sm.addBatch(sql2); |_@ '_
... ln-+=jk
sm.executeBatch() {x{e?c!
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 78&jaw*1A
2、PreparedStatement {s&6C-
PreparedStatement ps = cn.preparedStatement(sql); 4loG$l+a1
{ 8XZS BR(Z
ps.setXXX(1,xxx); PzbLbH8A
... *^e06xc:
ps.addBatch(); pJ!:mt
} 0Ah'G
ps.executeBatch(); |dcRDOTe
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 FJDx80J
o{5es
事务的处理 th]1>
.
1、关闭Connection的自动提交 7t
&KKKV
cn.setAutoCommit(false); 99j^<)
2、执行一系列sql语句 T~@$WM(
要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close sDA&U9;
Statement sm ; .\ K0+b;
sm = cn.createStatement(insert into user...);
#/a>dK
sm.executeUpdate(); 4jMCE&<