java 数据库基本操作 azKbGS/X
1、java数据库操作基本流程 Fp..Sjh
6
2、几个常用的重要技巧: &yN@(P)
可滚动、更新的记录集 msOk~ZPE6\
批量更新 +xMK.*H]W
事务处理 G\&4_MS
zz3Rld!b[
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 SDpaW6(_
1、取得数据库连接 -Wc'k 2oU
1)用DriverManager取数据库连接 B;?)
例子 S83wAr9T
String className,url,uid,pwd; FI{9k(
className = "oracle.jdbc.driver.OracleDriver"; _svY.ps*
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; ?khwupdi
uid = "system"; I)I,{xT4
pwd = "manager"; 6=a($s!
Class.forName(className); !fUrDOM0E
Connection cn = DriverManager.getConnection(url,uid,pwd); ?3jOE4~aHr
2)用jndi(java的命名和目录服务)方式 #R v&b@K
例子 JnE\E(ez
String jndi = "jdbc/db"; ujsJ;\c
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); k ]C+/
DataSource ds = (DataSource) ctx.lookup(jndi); ycB>gd
Connection cn = ds.getConnection(); VE1 B"s</
多用于jsp中 =FUORj\O
2、执行sql语句 :[P>e
ox
1)用Statement来执行sql语句 1"ko wp
String sql; \tE2@
Statement sm = cn.createStatement(); X+"8yZz3?
sm.executeQuery(sql); // 执行数据查询语句(select) 7@al)G;~
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); QWG?^T
fi
2)用PreparedStatement来执行sql语句 uCuXY#R+
String sql; tgEXX- {
sql = "insert into user (id,name) values (?,?)"; l&cYN2T
b
PreparedStatement ps = cn.prepareStatement(sql); IBm&a^
ps.setInt(1,xxx); Tx"}]AyB6
ps.setString(2,xxx); _D7MJT
... 'PTWC.C?9
ResultSet rs = ps.executeQuery(); // 查询 zS*GYE(l^
int c = ps.executeUpdate(); // 更新 5\/h3i"I
Wo=Q7~
3、处理执行结果 LQ
pUyqR
查询语句,返回记录集ResultSet Qag@#!&n
更新语句,返回数字,表示该更新影响的记录数 #|`/K[.xd%
ResultSet的方法 +o})Cs`|=A
1、next(),将游标往后移动一行,如果成功返回true;否则返回false Cc^`M9dP
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 HT7V} UiaO
4jEPh{q
4、释放连接 +V*FFv
cn.close(); 6-C9[[g<
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection OLpE0gZ.|`
R4=n">>Q
可滚动、更新的记录集 4{H>V_9zs
1、创建可滚动、更新的Statement |Q2H^dU'rQ
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); sxcpWSGA^
该Statement取得的ResultSet就是可滚动的 bJ8G5QU
2、创建PreparedStatement时指定参数 Z7?C^m
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); bj^YB,iSM
ResultSet.absolute(9000); z1A[rbe=4w
批量更新 <EKDP>,~
1、Statement * bx%hX
Statement sm = cn.createStatement(); ilL] pU-
sm.addBatch(sql1); DP`$gd
sm.addBatch(sql2); * Zb-YA
... {'P7D4w
sm.executeBatch() Ftu~nh}
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 N9IBw',
2、PreparedStatement +4U ?*:n
PreparedStatement ps = cn.preparedStatement(sql); `ZL~k
{ 8d.5D&
ps.setXXX(1,xxx); qXmkeidb&W
... e-vL!&;2
ps.addBatch(); !DFT}eu
} `ro~l_U;A
ps.executeBatch(); F/;uN5{o
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 8*yhx
w]Z*"B&h
事务的处理 dX|(n.}
1、关闭Connection的自动提交 </0@7
cn.setAutoCommit(false); f%ude@E3
2、执行一系列sql语句 b#cXn4<