java 数据库基本操作 SrNc
1、java数据库操作基本流程 @{RhO|UR
2、几个常用的重要技巧: #Pk{emYW
可滚动、更新的记录集 0xDn!
批量更新 =Pn"nkpML
事务处理 /-!Fr:Ox>
>n/0od9
java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 jNx{*2._r
1、取得数据库连接 @ NDcO,]
1)用DriverManager取数据库连接 b]?5r)GK
例子 e8f7*S8
String className,url,uid,pwd; M
2|
k.
className = "oracle.jdbc.driver.OracleDriver"; e;~(7/1
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; /,uxj5_cT
uid = "system"; 2hNl_P~z1u
pwd = "manager"; I 2AQ
G
Class.forName(className); $- ]G6r
Connection cn = DriverManager.getConnection(url,uid,pwd); \i[N";K
2)用jndi(java的命名和目录服务)方式 Has}oe[
例子 =Bc{0p*
String jndi = "jdbc/db"; 03)irq% l;
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); }@6yROy.
DataSource ds = (DataSource) ctx.lookup(jndi); PW%ith1)<
Connection cn = ds.getConnection(); ~sn3_6{
多用于jsp中 %"c;kvw
2、执行sql语句 {?^ES*5
1)用Statement来执行sql语句 > .}G[C
String sql; `K0.6i [p
Statement sm = cn.createStatement(); xe6V7Wi/Tt
sm.executeQuery(sql); // 执行数据查询语句(select) 4J`-&05O
sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close(); 6(?@B^S>2
2)用PreparedStatement来执行sql语句 q("l?'
String sql; c8]%,26.
sql = "insert into user (id,name) values (?,?)"; E$ 8-8[
PreparedStatement ps = cn.prepareStatement(sql);
:Kyr}-
ps.setInt(1,xxx); 65@GXn[W_
ps.setString(2,xxx); r
UZN$="N
... Y:+:>[F
ResultSet rs = ps.executeQuery(); // 查询 SkipPEhA
int c = ps.executeUpdate(); // 更新 JcP<@bb>B
;W+1 H !
3、处理执行结果 `ba<eT':
查询语句,返回记录集ResultSet (V~PYf%
更新语句,返回数字,表示该更新影响的记录数 x~O_v
ResultSet的方法 j]_"MMwk$<
1、next(),将游标往后移动一行,如果成功返回true;否则返回false s%qK<U4@;Q
2、getInt("id")或getSting("name"),返回当前游标下某个字段的值 ma M8:\
uO`YA]
4、释放连接 AJH-V
6
cn.close(); {YgB?kt5
一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection .!J,9PE
wq&TU'O
可滚动、更新的记录集 lN^} qg><
1、创建可滚动、更新的Statement vN4g#,<
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); @oL<Ioh
该Statement取得的ResultSet就是可滚动的 7e-l`]
2、创建PreparedStatement时指定参数 \uV;UH7qe
PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); !M&B=vk4
ResultSet.absolute(9000); Q:B :
批量更新 wMB<^zZmv
1、Statement ]jS+ItL@
Statement sm = cn.createStatement(); D ~Y3\KP
sm.addBatch(sql1); VXAgp6
sm.addBatch(sql2); P}QuGy[
... f[/E $r99J
sm.executeBatch() Et+N4w
一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有 "8"7AoE
2、PreparedStatement &H{KXX"X
PreparedStatement ps = cn.preparedStatement(sql); 8BZDaiE"
{ ^\<1Y''
ps.setXXX(1,xxx); v(t?d
... nNFZ77lg
ps.addBatch(); 8W"~>7/>D
} Ot]PH[+
ps.executeBatch(); `_'I 9,.a
一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。 ,9f$an
i- E~ZfJ
事务的处理 bgm$<