-------------------------------------JDBC 2.0———————————————————————————— , D: W9 v. n; ^0 m6 e' \0 \' [-----实现可滚动结果集,并使用结果集控制游标,访问整张表;
- package com.**;
" U. `: c8 s8 C, v2 @
- ! k$ r' d; @$ Y1 C
- import java.sql.DriverManager;
) o- Q! D5 m4 p) X4 F6 a* V6 w( D
- import java.sql.Connection;/ k5 {4 E& Y* @) R1 d% W# R
- import java.sql.PreparedStatement;1 \: m y0 a+ |* q* V0 s
- import java.sql.ResultSet;- O( s# [+ f8 {, Q6 M1 q9 t. I- ]
- 5 q# @9 M' K7 X& n! a. S7 V
- 6 |+ i" s' ~3 |3 d7 `1 `
- public class ScrollResult z3 T" c: z: E% o# L7 x% k8 [. n
- {
2 q8 G, V+ D8 O" u9 I. N5 ]- a% Z
- // 连接驱动路径* F$ h6 | | Y+ d
- public static final String DRIVER = "com.mysql.jdbc.Driver"; // "org.gjt.mm.mysql.driver"0 u2 l& ?7 n p5 r
- // 定义数据源URL:数据库地址: Q; @& F! A+ n- \4 J
- public static final String DBURL = "jdbc:mysql://localhost:3306/school?characterEncoding=utf8";+ U, y/ z4 g" D+ Z1 D9 s
- // 定义数据库登录的用户名:- H7 J' d) S( p
- public static final String USERNAME = "root";- d8 B4 a) C5 h5 t | U
- // 定义数据库登录的密码:
* H, G! U' e7 A" [- C
- public static final String PASSWORD = "123456";
A2 @+ d& x3 B" w; _
- 8 i N- L# Z5 d8 u0 X
- public static void main(String[] args) throws Exception // 抛出所有异常
! ]! _, I" ^, c( @6 z% `
- {: J4 t+ z9 W0 X& Y T
- Connection conn = null; // 数据库连接
* F- A' M- p8 g' e0 i6 ^8 _
- PreparedStatement pstmt = null; // 预编译语句
6 Z% j O$ _+ `
- ResultSet rs = null; // 结果集
) l3 \; Y. Q4 b7 _
-
' W8 x( M; _2 S+ m( E
- // 加载数据库驱动
7 O- N5 E" o! s
- Class.forName(DRIVER);
3 J, u, G! g; n. F) N& R
- // 获取数据库连接' e a U U) b& ^9 q0 P
- conn = DriverManager.getConnection(DBURL, USERNAME, PASSWORD);) w/ Z! s' J0 w5 O
- String sql = "select id, name, age, sex, birthday from student order by id asc";( I5 M8 |/ a; d; {: _/ F
- // 获取可滚动的结果集: 对并发更改敏感,并发只读,这是jdbc2.0的api
, N) y7 w _0 k4 U- V
- pstmt = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
3 e. F0 Q- Q$ |$ W
- // 查询
6 N+ O" @* b% ~5 b+ J# y* h n& \8 \
- rs = pstmt.executeQuery(); // 默认地, rs的游标在First行之前,此时读不出数据' Z' N7 n6 O( v3 {
- rs.next(); // 游标下移一行
. O3 ~% |0 f4 Z- J! [- _, q1 o N
- print(rs); // ubuntu@xu-desktop:~$ java com.**.ScrollResult id:1 姓名:王敏 年龄:王敏 性别:女 生日:2009-01-05
# }) C6 }" F# Q& X- T! U# o' w
-
; ?& c5 Y2 a: k7 T) J$ N9 N
- rs.absolute(2); // 游标定位在第二行
9 f0 V/ I$ R. q8 V
- print(rs); // id:3 姓名:王方 年龄:王方 性别:女 生日:2009-01-05 // 这是第二行
* [. ]& P ^/ v% Q7 Q
- - T. }/ N1 A% t
- rs.first(); // 游标定位第一行 等价于 absolute(1)
9 F9 G4 b8 y, j, U) R& G
- print(rs); // id:1 姓名:王敏 年龄:王敏 性别:女 生日:2009-01-05
& ^/ v" `$ b A/ Y/ _; R8 H" K' P
-
7 @6 C" H7 O1 D: e5 k) D
- rs.afterLast(); // 游标到Last行后面% E& ]( s. y/ A' X7 G& C
- rs.previous(); // 游标往前移动一行到最后一行上! @9 A' X3 R$ N% l( V
- print(rs); // id:25 姓名:k187 年龄:k187 性别:男 生日:1982-02-25 // 最后一行, t, p( |* D3 W7 a1 x* d3 l8 {
% R. r5 t$ n/ X1 C
- rs.beforeFirst(); // 游标到First行前面
! J7 ?" s# _* b' |
- rs.next(); // 游标往下移动一行到第一行上
7 ^! ^6 g5 G. k
- print(rs); // id:1 姓名:王敏 年龄:王敏 性别:女 生日:2009-01-05
; k! K- w7 z4 w$ n* { F
; u6 L! H, l A1 d" v' k( I
- rs.absolute(-1); // 等价于 last(); 最后一行. j8 ~+ |3 l$ _# F. q# B- b
- print(rs); // id:25 姓名:k187 年龄:k187 性别:男 生日:1982-02-25. g0 m8 s/ G" {# T& P
-
' s& V: `, c# {6 M& M$ C" H! g
- rs.close();7 E: [1 Q0 I2 ^: ?! ^' f
- pstmt.close();8 a! w+ v2 [% T. k
- conn.close();
1 }$ `" c( I [8 [ `/ w
- }& o" W% y; r. Z P- W
-
4 k0 O& h8 g3 l
- public static void print(ResultSet rs) throws Exception ! {% Z) \4 k* K9 F! k: l
- { 8 I8 @* L' N% o7 s
- if (rs.getRow() > 0)
# z9 ` m! p( R
- {0 a% R* T2 X' N$ S2 w7 s" e
- int id = rs.getInt(1);3 E! g; c: V' M7 D
- String name = rs.getString(2);6 ]7 i! ]+ t& R3 b/ @* w# {
- int age = rs.getInt(3);
, i8 y! |8 G2 m( o1 ]
- String sex = rs.getString(4);
. ]3 |6 k, p' H' e. W
- java.util.Date birth = rs.getDate(5);( K: X" }( ?5 J9 X9 }1 d, d) w
- ( P& U9 I6 W6 Z6 @% @# U" @& I q* |
- System.out.println("id:" + id + " 姓名:" + name + " 年龄:" + name + " 性别:" + sex + " 生日:" + birth);
2 S5 L! [$ o; T+ `% B
- }
+ n* x/ o1 E$ T/ ]7 T1 [- ]: A
- }) p3 C& h$ g1 \3 W y
- }
+ @0 U7 ^. q ~3 P; ^
- /*
' x# w, ]* l4 @
- 此种操作,不宜在开发中使用,因为大量的可滚动的查询,将占用大量的内存空间!
1 o* Y0 G9 K; j, d
- */
复制代码 ----------使用可滚动的结果集插入一行:
- package com.**;
- B# G* ]# }; V* b0 l& P S
- ) E1 z4 ^5 V" w, P$ T
- import java.sql.DriverManager;
7 H# L8 t2 K, o ^# m' c4 V9 w. C* N) @
- import java.sql.Connection;1 `1 l L$ F4 I6 V
- import java.sql.PreparedStatement;
( F+ o, j! ] o, R5 U; x0 ^2 b
- import java.sql.ResultSet;, u% T; D9 T: Q5 v/ o) v! B9 n
- ; Z/ S) o8 n5 ~' g) e& m0 K
; Z/ f0 d* N5 l' _8 K
- public class ScrollResultUpdate
" H, V- Q1 m8 T- A1 [5 a
- {
0 h6 W9 s+ A- R0 D' \ D% b8 e
- // 连接驱动路径
/ A. P# y8 Z0 t$ F/ h
- public static final String DRIVER = "com.mysql.jdbc.Driver"; // "org.gjt.mm.mysql.driver"8 G& T5 T3 k4 p5 Y$ T* a
- // 定义数据源URL:数据库地址
4 u! T6 F5 X. m0 v% d5 L h( h0 P0 {
- public static final String DBURL = "jdbc:mysql://localhost:3306/school?characterEncoding=utf8";- A9 I0 X7 _7 W& U
- // 定义数据库登录的用户名:( q) n$ [- Z7 v/ Y! t2 f( k p
- public static final String USERNAME = "root";# @0 a2 y( W6 K$ S. d; u" t
- // 定义数据库登录的密码:
4 ^3 A4 h! M) O* N3 j5 |
- public static final String PASSWORD = "123456";
. |- @7 X7 F. Z& r
-
; C) T$ @) G t
- public static void main(String[] args) throws Exception // 抛出所有异常/ t$ L2 X% G' w& I/ x) f3 L
- {- m; x4 w$ |7 k9 C a+ ?6 J
- Connection conn = null; // 数据库连接6 i! J6 `) i" ~: f2 Y, Q7 f
- PreparedStatement pstmt = null; // 预编译语句+ a5 R7 B( \0 {' X+ y- a' Q
- ResultSet rs = null; // 结果集( i, D) T1 K* m+ q" i$ N' C- _
- ( `. q# c& r& n: U* C3 |
- // 加载数据库驱动
+ U9 z# }1 _0 J- n# w
- Class.forName(DRIVER);# L+ i3 ?% N8 m8 t! A
- // 获取数据库连接% H. t) `* A6 {% m* n
- conn = DriverManager.getConnection(DBURL, USERNAME, PASSWORD); A+ ]8 B, X8 J( k; x
- String sql = "select id, name, age, sex, birthday from student";8 Z/ t( c" Z( w
- // 获取可滚动的结果集: 对并发更改敏感,并发可更新,这是jdbc2.0的api
& I/ N) N3 N. h9 o" \
- pstmt = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
3 Q# ~+ K) Z" x% I% _" \
- // 查询( I: }6 }8 J- S$ ]7 N+ F" J
- rs = pstmt.executeQuery();
5 Y- |5 Z7 F% X
- // 移动游标到插入行
4 q+ m, {3 O) v( L
- rs.moveToInsertRow();
9 ^/ G* c) H- j8 s- p) x# s9 }6 ?
- // 设置插入值/ [: n2 C: f; O% J- e
- rs.updateString(2, "k187");
! K: ]6 V4 q: c/ z( D4 [
- rs.updateInt(3, 2);
U: s! r$ Q* d2 b1 u) B m
- rs.updateString(4, "女");, L3 s P, e2 z0 \/ r! q
- rs.updateDate(5, new java.sql.Date(new java.util.Date().getTime())); // 日期必须用sql支持的
# F7 D: i8 i: K c4 J w1 W
- // 执行插入
0 [2 A: F' H- f" M5 u! F
- rs.insertRow();
_4 I( u$ J. b7 X5 Y7 m! n
- // 移动到当前行:插入的行的前面
: L- Q1 S6 P d, S' K! v7 V
- //rs.moveToCurrentRow(); // 只有insertRow有效,但此时的位置不是插入的行,而是插入的行的前面( X" K0 g0 K! Q: Q" x
- //rs.last(); // 这才是插入的行
- L5 u1 A' \$ u+ t
- rs.next(); // id:1 姓名:王敏 年龄:王敏 性别:女 生日:2009-01-05,这也是插入的行,如果没有这样的操作,print不会打印内容1
( N! l3 O+ N' M* m8 m5 h- ]% E
- print(rs); // 打印插入的行1 j9 }: _) x/ k
- }' i( b, }4 _: z( F* v! O8 Y
-
9 p [: F$ X/ a8 D
- public static void print(ResultSet rs) throws Exception
' a9 {, f0 `& r# O: P
- {
1 |, T N# E0 ^6 O
- if (rs.getRow() > 0): p% ]! H, {- ]: Z; a4 Y; z7 E
- {- o# U+ y. ^4 t" {) P- r
- int id = rs.getInt(1);
: w' W% t6 n6 _. A, Z4 N
- String name = rs.getString(2);0 [# c+ s: R3 @
- int age = rs.getInt(3);
( r+ R. i4 r9 f8 i6 e
- String sex = rs.getString(4);
# K8 d2 G$ [& @
- java.util.Date birth = rs.getDate(5);$ H& j- D2 I/ R! V4 u3 D/ h
-
' L: x) l% |( [! c3 R% w2 W% X
- System.out.println("id:" + id + " 姓名:" + name + " 年龄:" + name + " 性别:" + sex + " 生日:" + birth);" ?' J% B1 k& \& c. [
- }
# G; K1 @ s5 y7 D6 a' K
- }
+ f/ K9 F# E8 i. N% v5 r
- }
复制代码 ---------使用可滚动结果集更新一行:
- package com.**;5 M& C; z$ e. ~/ {* {
9 _" P0 n; I5 {; a9 l* T8 Y. x
- import java.sql.DriverManager;
6 d @% Z5 @' A5 \# e' L: x
- import java.sql.Connection;" V( D& \9 k! q- j1 p
- import java.sql.PreparedStatement;5 P' W1 L6 j! c3 m# e4 ~# I
- import java.sql.ResultSet;
! V1 q4 B0 ^2 a; K( t
- 1 }# ^2 `2 [ O* v4 k- W9 o6 ?
- ' B/ @! r; @4 L! X" c
- public class ScrollResultUpdate
, _5 {- I5 E7 N$ \ W8 P* M. R( z
- {% C; w! k0 S$ D: ^4 ?6 W4 m& o
- // 连接驱动路径4 A. P" L6 O: [8 R( T7 t4 s
- public static final String DRIVER = "com.mysql.jdbc.Driver"; // "org.gjt.mm.mysql.driver"
; F! I. E" I/ |1 b1 B! _! r
- // 定义数据源URL:数据库地址
% c$ R2 e. g. ^- [8 [1 L; m9 w
- public static final String DBURL = "jdbc:mysql://localhost:3306/school?characterEncoding=utf8";9 M- u8 ^; Y7 p: B$ o
- // 定义数据库登录的用户名:
3 `) K1 l; I4 Z- M9 Y
- public static final String USERNAME = "root";
2 b. f! W6 @& h% D) _; u
- // 定义数据库登录的密码:( J1 A. N3 z# I- I! N5 l. h
- public static final String PASSWORD = "123456";$ P2 i9 `- h3 F, L: D
-
( D2 B4 t3 x: m x6 T) z m
- public static void main(String[] args) throws Exception // 抛出所有异常
* L8 E; P4 q$ ?1 K& K9 Y* g3 d
- {- u6 I0 e% \9 D7 k- D
- Connection conn = null; // 数据库连接
9 F4 N- e0 e- u9 P( s# n
- PreparedStatement pstmt = null; // 预编译语句
& ^1 w3 j& l% `% r" f3 B3 R
- ResultSet rs = null; // 结果集5 B; F6 ]4 \6 Z
-
) W8 O* D6 ~1 h* a! S
- // 加载数据库驱动0 t( a' y2 v* e4 Z- @; i1 V, I1 `1 t
- Class.forName(DRIVER);) y0 a/ y) g( |
- // 获取数据库连接4 k I. h1 b7 p0 [/ x
- conn = DriverManager.getConnection(DBURL, USERNAME, PASSWORD);
- |- f/ t# C3 j! Y5 f- ^' D: W& v) v
- String sql = "select id, name, age, sex, birthday from student";
1 f+ y& X; k5 u. s: p
- // 获取可滚动的结果集: 对并发更改敏感,并发可更新,这是jdbc2.0的api
) Y ]: y( j1 c0 j
- pstmt = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);: Y& O# X% J) R
- // 查询
$ `$ x( N$ C# O; E$ d1 @3 F
- rs = pstmt.executeQuery(); $ f$ r5 Z) v$ f% k( Y
- // 移动游标到更新行1 B7 W: e* f" X: p) _ w) a
- rs.absolute(5);
6 y- j4 l$ V9 a1 J5 J
- // 设置更新值1 x+ i% M* R4 d3 o: |% E. B3 _) _
- rs.updateString("name", "k187");
+ F! @3 q2 G7 i# J# A0 U
- rs.updateInt(3, 2);; @. `) f5 I8 U* d1 j' c! X; I
- rs.updateString(4, "女");
& t5 e7 ]4 z" L/ e
- rs.updateDate(5, new java.sql.Date(new java.util.Date().getTime())); // 日期必须用sql支持的; r3 @6 | k- _! l
- // 执行更新2 ^1 i& N( @' W/ ?
- rs.updateRow();
" n9 O9 m6 V$ t* |
-
0 V$ \8 d# v- Q& a/ V
- print(rs); // 打印更新的行
4 B5 @. V" l3 c. T1 N
- : `0 d5 z' r- A
- rs.close();
, E9 j1 g' o1 x3 y
- pstmt.close();2 e8 C$ O, S- E8 \9 r& Q* }
- conn.close();
5 h; ]- x" @$ X% X S% ^" [1 `! f$ [3 [
- }* G* C& n# s, K% E9 W9 O
-
8 \3 c0 C1 X0 W; k! ~% t2 t0 d
- public static void print(ResultSet rs) throws Exception 3 N$ t7 V8 y9 u1 |
- { # M# l/ `+ K) m
- if (rs.getRow() > 0)1 \7 h% G! r% i' K( s$ B& v
- {
& I3 o, e. I) f' S# Q& H
- int id = rs.getInt(1);# H8 M5 O. T0 t! ]; W
- String name = rs.getString(2);. K" ]9 e3 \3 A/ z
- int age = rs.getInt(3);
4 x5 p( P9 d3 X( t4 M2 ^( A
- String sex = rs.getString(4);' R! i1 ?. w$ i& K: u
- java.util.Date birth = rs.getDate(5);& D N2 H- T. o8 ^0 Q# E+ U
-
/ h* o0 Y z1 A
- System.out.println("id:" + id + " 姓名:" + name + " 年龄:" + age + " 性别:" + sex + " 生日:" + birth);
5 E, v7 v2 i, j; s
- } k+ w* ]' d) g8 q3 H% F
- }
5 S- T( t. l }* N
- }
$ [! A2 N8 k1 S5 R- O# [, D
- /*/ r1 \ Z7 F. m- w- o) p
- ubuntu@xu-desktop:~$ java com.**.ScrollResultUpdate2 J" K# H1 z! o" n1 x% r
- id:5 姓名:k187 年龄:2 性别:女 生日:2010-04-17$ Z* U$ d/ M7 X% X
- // 第5行被更新了!当然也可以采用PreparedStatement对象的set方法设置选择更新哪一行;4 x( ?; r% r5 b. y( t+ ~
- */
复制代码 ------取消更新:
- package com.**;
. q3 n; ~/ y; A3 X7 f, q' [' v
- 1 N0 f6 T' {% v9 D, }
- import java.sql.DriverManager;
& u" D; Q6 a( _; q. b8 `3 @
- import java.sql.Connection;
: b& X7 i7 o% U+ S1 k
- import java.sql.PreparedStatement;7 `: ?& a1 l1 K
- import java.sql.ResultSet;
" | V! d' f- J& _
- + P8 ]; ]- Y1 _* T4 Q6 X' Z9 F' }
5 k+ n, Y7 ^7 J& ~3 [# S( m* [7 f3 I% K
- public class ScrollResultUpdate/ B% {3 r9 ]5 S* f! M
- {3 X& C1 z+ |7 o& b/ ? ~
- // 连接驱动路径
5 d" {% L* `( F. ~8 q
- public static final String DRIVER = "com.mysql.jdbc.Driver"; // "org.gjt.mm.mysql.driver"
/ }# l; d! J0 y' S+ l) x+ X( {# Q
- // 定义数据源URL:数据库地址 d, S7 G f. P1 I4 ]0 A* M, k
- public static final String DBURL = "jdbc:mysql://localhost:3306/school?characterEncoding=utf8";
/ e* O& B8 u0 H u# ~1 s
- // 定义数据库登录的用户名:
' F& F0 g* I3 n: n9 b9 W0 E
- public static final String USERNAME = "root";! w* P& u& T2 \+ |( Q; [1 }
- // 定义数据库登录的密码:8 _; d" l' h1 Q0 K* V' Q
- public static final String PASSWORD = "123456";' K9 _* @" R4 T- c5 _
- : H' z' Y4 h/ w3 m) Q
- public static void main(String[] args) throws Exception // 抛出所有异常
0 p7 }. @- X$ b. D1 [; a
- {
8 @0 x" k( C0 V' r+ d' r3 D& @
- Connection conn = null; // 数据库连接
9 Y2 |: \; m+ u3 N8 W4 `1 q7 q
- PreparedStatement pstmt = null; // 预编译语句- a* ~7 F4 i w
- ResultSet rs = null; // 结果集
6 z, ~ X# g& M# g4 f: O9 j
- ) P# M1 |( z% x' @
- // 加载数据库驱动1 L P( w+ O, k8 |4 r# V6 }/ Q
- Class.forName(DRIVER);
' l+ K3 {- B' J/ ~
- // 获取数据库连接0 ?$ m9 B9 M1 H4 n; h
- conn = DriverManager.getConnection(DBURL, USERNAME, PASSWORD);
: ~3 ~0 l$ s+ n5 c7 {
- String sql = "select id, name, age, sex, birthday from student";3 S- [1 q7 X1 m5 j9 G* m/ _+ C1 G
- // 获取可滚动的结果集: 对并发更改敏感,并发可更新,这是jdbc2.0的api
8 H6 ?6 N ~# [, o3 B
- pstmt = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
9 q3 i) x: M/ d; t B
- // 查询
1 Z7 _' R" X: x* p" Z& ^
- rs = pstmt.executeQuery(); " \0 ~+ Z& v" V. V$ A9 c
- // 移动游标到更新行
c# v3 n2 U+ `* b
- rs.absolute(5); " H' [4 G: w+ @) n) m# A
- // 设置更新值9 T+ Z+ M- G5 H% ~ S7 v
- rs.updateString("name", "k187");8 ]5 q Q: [+ z6 }$ n
- rs.updateInt(3, 2);" ]$ ]: u; T n6 F0 [$ t) S
- rs.updateString(4, "女");1 m* E! u0 t) T7 N$ _0 Y3 U
- rs.updateDate(5, new java.sql.Date(new java.util.Date().getTime())); // 日期必须用sql支持的
/ L) j \/ A7 m* J1 @
- // 取消更新
- n8 a1 C. u1 T8 V
- rs.cancelRowUpdates(); // 只有在更新前面被调用时才可以取消! X" ?, e: b. i* d6 Q" X7 [. U
- // 执行更新: M8 f* R2 l$ ~# Y. `: Q$ J
- rs.updateRow();
, t8 Z! O# L4 L! o( P- B% o
- , j# H- o& |. `* N
- 2 ]5 P' J4 H" k Z/ ]
- print(rs); // 打印更新的行! T2 _& ^2 I% Q3 r: i: O
- 5 O0 l* e7 ~: G& G, [ N* Q7 o
- rs.close();, Y8 M8 m! O0 m z5 S% }7 Y
- pstmt.close();
, h2 v8 [5 w$ O D3 P/ t S/ v% e0 s
- conn.close();
2 ]) l0 Y4 B' G' z( }
- }/ y- A1 Q4 h2 e
- 6 l* ~2 T( C' k% i* @
- public static void print(ResultSet rs) throws Exception : H4 s0 z% I& D J" E" B
- {
9 b' ?1 ^+ Z' p4 v- \
- if (rs.getRow() > 0)
: y5 \4 u/ E: H, E8 d$ B# q+ y, L
- {
9 a- P$ Y+ P5 u
- int id = rs.getInt(1);7 A4 B2 O' z& z Y: ]1 n7 e* m
- String name = rs.getString(2);
& r4 m9 r) Z6 P
- int age = rs.getInt(3);
" Z& _8 c% X$ [# t& h& Y+ ~* I
- String sex = rs.getString(4);
% A/ n' p* J# l2 g( ?0 p
- java.util.Date birth = rs.getDate(5);# N8 o" |7 k: B- F
- 4 R3 J# | q: q$ W% n
- System.out.println("id:" + id + " 姓名:" + name + " 年龄:" + age + " 性别:" + sex + " 生日:" + birth);
5 D, D/ O2 o {9 z% j. }, d7 g
- }
6 e* ?; o( x5 q
- }8 Z* w V' L, Z
- }
2 T/ Z! I& N% e; h# j
- /*: h. J6 D( c9 c7 r
- ubuntu@xu-desktop:~$ java com.**.ScrollResultUpdate
4 ~9 `1 t& C& m! p3 ]8 a9 k
- id:5 姓名:www 年龄:20 性别:女 生日:2010-04-17
% ~! m5 ?6 H3 }) J. Z- C2 B6 H* b
- // 第5行没有被修改
# ?0 ^+ n* s- B* H* q* t
- */
复制代码 -------使用可滚动的结果集删除一行:
- package com.**;, |1 U/ N6 o6 r; p2 E7 \* G" {3 B
; V2 x: c* ^% N* E" T3 q( }* t
- import java.sql.DriverManager;7 }9 T5 `2 q: @9 R( Z: p$ S- Z
- import java.sql.Connection;
& S3 @" K5 ]! Z- S7 {. T7 J
- import java.sql.PreparedStatement;% g2 w/ _4 I3 d8 a7 N9 O/ h
- import java.sql.ResultSet;2 d" f1 _. Q' n, d7 z2 O2 |
- " s+ h8 {& f4 H) S# G/ V/ i
- : }8 ] k0 |3 e# K
- public class ScrollResultDelete
. N3 q! X' i2 H1 R
- {/ {: p: C$ r+ e" X: N7 j$ n+ _
- // 连接驱动路径) l" A! W5 Y$ P# q5 b
- public static final String DRIVER = "com.mysql.jdbc.Driver"; // "org.gjt.mm.mysql.driver"- B( o, t$ @2 F# e
- // 定义数据源URL:数据库地址
) ?/ ?3 q" j, [ U1 ?& T0 j
- public static final String DBURL = "jdbc:mysql://localhost:3306/school?characterEncoding=utf8";* H% G/ m8 Q6 B0 `' K4 }. P$ V
- // 定义数据库登录的用户名:" Q6 v7 ^) D1 ? X4 p6 [
- public static final String USERNAME = "root";7 F. y5 ]! _% { o6 {7 ]: |1 m
- // 定义数据库登录的密码:' X1 {. r( s" ~
- public static final String PASSWORD = "123456";+ o. E+ [4 i# i; h% l7 n. H
- % e) n' C w3 x' q2 G
- public static void main(String[] args) throws Exception // 抛出所有异常; ^2 K. C0 ?" n/ m% E% S
- {
3 E2 h. m0 ~, U0 L# l
- Connection conn = null; // 数据库连接4 [" h7 M8 J6 D2 J' N
- PreparedStatement pstmt = null; // 预编译语句
8 R) k" b0 ]) v8 T' h! K
- ResultSet rs = null; // 结果集
: T4 U: [7 p. d: ?8 s6 d8 Q
-
: x7 _) P$ n b/ k T$ e$ m0 k3 i7 i
- // 加载数据库驱动
A$ e( g( F% \3 B! `# |" |
- Class.forName(DRIVER);$ J- d! x1 ]4 I5 U6 O
- // 获取数据库连接; Z9 {5 z0 N& }* s& w3 V3 @
- conn = DriverManager.getConnection(DBURL, USERNAME, PASSWORD);6 X" y) C) y7 j2 V1 f/ D2 u. l* M
- String sql = "select id, name, age, sex, birthday from student";' D* u% h; o% R8 H% O, d" b0 D& [
- // 获取可滚动的结果集: 对并发更改敏感,并发可更新,这是jdbc2.0的api
* F9 d9 z. t% e
- pstmt = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);' H n K4 p6 b. t
- // 查询
1 O, W$ u& z8 z. c* n1 p7 X
- rs = pstmt.executeQuery();
$ T% O4 j% s8 P! M
- // 移动游标到要删除的行
; M0 B$ h0 ]8 D3 ~1 A
- rs.absolute(20); ! p+ x& `4 F5 f# @4 W/ b
-
; ]4 z% D/ u; H- e; p7 @0 v
- // 执行删除
; K( e- L* b4 K; X; V/ q4 v! F$ p5 H, C ~
- rs.deleteRow();" G7 h. T1 @9 |8 X$ O
-
# n! `) E3 a! H
- rs.close();
* n! |& U d3 N* Y* h5 j
- pstmt.close();
' s. ^- |4 e4 F# E" I& N5 M8 e
- conn.close();% p0 G. i+ I) i E) \+ M
- }
3 B8 w1 y( s9 o) X' A& x4 [
- }, }% v4 K P$ p5 P6 e, S5 T- J U
- /*
R. R# G3 y0 A* ~( `4 u6 p% h
- ubuntu@xu-desktop:~$ java com.**.ScrollResultUpdate ^& h) ?! L, o6 H/ A. z
- id:5 姓名:www 年龄:20 性别:女 生日:2010-04-179 M! q2 r' F2 ~* z
- // 第5行没有被修改
a9 E9 u1 U$ G( u) y. m; C1 S+ d% a
- //3 x5 z6 N8 J t. t# f3 e0 R1 u1 w6 m
- */
复制代码 // jdbc2.0对结果集的提升很方便,但是效率不高,正常情况下不如直接使用PreparedStatement; |