ITPub博客

首页 > Linux操作系统 > Linux操作系统 > JDBC2.0实现可滚动结果集,控制游标,并实现更、删、插入、查询

JDBC2.0实现可滚动结果集,控制游标,并实现更、删、插入、查询

原创 Linux操作系统 作者:sc_wushengyong 时间:2010-10-21 09:35:08 0 删除 编辑
搜索看看:JDBC2.0实现可滚动结果集,控制游标,并实现更、删、插入、查询
-------------------------------------JDBC 2.0————————————————————————————
, D: W9 v. n; ^0 m6 e' \0 \' [-----实现可滚动结果集,并使用结果集控制游标,访问整张表;
  1. package com.**;
    " U. `: c8 s8 C, v2 @
  2. ! k$ r' d; @$ Y1 C
  3. import java.sql.DriverManager;
    ) o- Q! D5 m4 p) X4 F6 a* V6 w( D
  4. import java.sql.Connection;/ k5 {4 E& Y* @) R1 d% W# R
  5. import java.sql.PreparedStatement;1 \: m  y0 a+ |* q* V0 s
  6. import java.sql.ResultSet;- O( s# [+ f8 {, Q6 M1 q9 t. I- ]
  7. 5 q# @9 M' K7 X& n! a. S7 V
  8. 6 |+ i" s' ~3 |3 d7 `1 `
  9. public class ScrollResult  z3 T" c: z: E% o# L7 x% k8 [. n
  10. {
    2 q8 G, V+ D8 O" u9 I. N5 ]- a% Z
  11.         // 连接驱动路径* F$ h6 |  |  Y+ d
  12.         public static final String DRIVER = "com.mysql.jdbc.Driver"; // "org.gjt.mm.mysql.driver"0 u2 l& ?7 n  p5 r
  13.         // 定义数据源URL:数据库地址: Q; @& F! A+ n- \4 J
  14.         public static final String         DBURL = "jdbc:mysql://localhost:3306/school?characterEncoding=utf8";+ U, y/ z4 g" D+ Z1 D9 s
  15.         // 定义数据库登录的用户名:- H7 J' d) S( p
  16.         public static final String USERNAME = "root";- d8 B4 a) C5 h5 t  |  U
  17.         // 定义数据库登录的密码:
    * H, G! U' e7 A" [- C
  18.         public static final String PASSWORD = "123456";
      A2 @+ d& x3 B" w; _
  19.         8 i  N- L# Z5 d8 u0 X
  20.         public static void main(String[] args) throws Exception // 抛出所有异常
    ! ]! _, I" ^, c( @6 z% `
  21.         {: J4 t+ z9 W0 X& Y  T
  22.                 Connection conn = null;        // 数据库连接
    * F- A' M- p8 g' e0 i6 ^8 _
  23.                 PreparedStatement pstmt = null; // 预编译语句
    6 Z% j  O$ _+ `
  24.                 ResultSet rs = null;        // 结果集
    ) l3 \; Y. Q4 b7 _
  25.                
    ' W8 x( M; _2 S+ m( E
  26.                 // 加载数据库驱动
    7 O- N5 E" o! s
  27.                 Class.forName(DRIVER);
    3 J, u, G! g; n. F) N& R
  28.                 // 获取数据库连接' e  a  U  U) b& ^9 q0 P
  29.                 conn = DriverManager.getConnection(DBURL, USERNAME, PASSWORD);) w/ Z! s' J0 w5 O
  30.                 String sql = "select id, name, age, sex, birthday from student order by id asc";( I5 M8 |/ a; d; {: _/ F
  31.                 // 获取可滚动的结果集: 对并发更改敏感,并发只读,这是jdbc2.0的api
    , N) y7 w  _0 k4 U- V
  32.                 pstmt = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
    3 e. F0 Q- Q$ |$ W
  33.                 // 查询
    6 N+ O" @* b% ~5 b+ J# y* h  n& \8 \
  34.                 rs = pstmt.executeQuery();        // 默认地, rs的游标在First行之前,此时读不出数据' Z' N7 n6 O( v3 {
  35.                 rs.next();        // 游标下移一行
    . O3 ~% |0 f4 Z- J! [- _, q1 o  N
  36.                 print(rs);        // ubuntu@xu-desktop:~$ java com.**.ScrollResult id:1 姓名:王敏 年龄:王敏 性别:女 生日:2009-01-05
    # }) C6 }" F# Q& X- T! U# o' w
  37.                
    ; ?& c5 Y2 a: k7 T) J$ N9 N
  38.                 rs.absolute(2);        // 游标定位在第二行
    9 f0 V/ I$ R. q8 V
  39.                 print(rs);        // id:3 姓名:王方 年龄:王方 性别:女 生日:2009-01-05 // 这是第二行
    * [. ]& P  ^/ v% Q7 Q
  40.                 - T. }/ N1 A% t
  41.                 rs.first();        // 游标定位第一行 等价于 absolute(1)
    9 F9 G4 b8 y, j, U) R& G
  42.                 print(rs);        // id:1 姓名:王敏 年龄:王敏 性别:女 生日:2009-01-05
    & ^/ v" `$ b  A/ Y/ _; R8 H" K' P
  43.                
    7 @6 C" H7 O1 D: e5 k) D
  44.                 rs.afterLast();        // 游标到Last行后面% E& ]( s. y/ A' X7 G& C
  45.                 rs.previous();        // 游标往前移动一行到最后一行上! @9 A' X3 R$ N% l( V
  46.                 print(rs);                // id:25 姓名:k187 年龄:k187 性别:男 生日:1982-02-25 // 最后一行, t, p( |* D3 W7 a1 x* d3 l8 {

  47. % R. r5 t$ n/ X1 C
  48.                 rs.beforeFirst();        // 游标到First行前面
    ! J7 ?" s# _* b' |
  49.                 rs.next();        // 游标往下移动一行到第一行上
    7 ^! ^6 g5 G. k
  50.                 print(rs);        // id:1 姓名:王敏 年龄:王敏 性别:女 生日:2009-01-05
    ; k! K- w7 z4 w$ n* {  F

  51. ; u6 L! H, l  A1 d" v' k( I
  52.                 rs.absolute(-1); // 等价于 last(); 最后一行. j8 ~+ |3 l$ _# F. q# B- b
  53.                 print(rs);        // id:25 姓名:k187 年龄:k187 性别:男 生日:1982-02-25. g0 m8 s/ G" {# T& P
  54.                
    ' s& V: `, c# {6 M& M$ C" H! g
  55.                 rs.close();7 E: [1 Q0 I2 ^: ?! ^' f
  56.                 pstmt.close();8 a! w+ v2 [% T. k
  57.                 conn.close();
    1 }$ `" c( I  [8 [  `/ w
  58.         }& o" W% y; r. Z  P- W
  59.        
    4 k0 O& h8 g3 l
  60.         public static void print(ResultSet rs) throws Exception        ! {% Z) \4 k* K9 F! k: l
  61.         {                8 I8 @* L' N% o7 s
  62.                 if (rs.getRow() > 0)
    # z9 `  m! p( R
  63.                 {0 a% R* T2 X' N$ S2 w7 s" e
  64.                         int id = rs.getInt(1);3 E! g; c: V' M7 D
  65.                         String name = rs.getString(2);6 ]7 i! ]+ t& R3 b/ @* w# {
  66.                         int age = rs.getInt(3);
    , i8 y! |8 G2 m( o1 ]
  67.                         String sex = rs.getString(4);
    . ]3 |6 k, p' H' e. W
  68.                         java.util.Date birth = rs.getDate(5);( K: X" }( ?5 J9 X9 }1 d, d) w
  69.                         ( P& U9 I6 W6 Z6 @% @# U" @& I  q* |
  70.                         System.out.println("id:" + id + " 姓名:" + name + " 年龄:" + name + " 性别:" + sex + " 生日:" + birth);
    2 S5 L! [$ o; T+ `% B
  71.                 }
    + n* x/ o1 E$ T/ ]7 T1 [- ]: A
  72.         }) p3 C& h$ g1 \3 W  y
  73. }
    + @0 U7 ^. q  ~3 P; ^
  74. /*
    ' x# w, ]* l4 @
  75. 此种操作,不宜在开发中使用,因为大量的可滚动的查询,将占用大量的内存空间!
    1 o* Y0 G9 K; j, d
  76. */
复制代码
----------使用可滚动的结果集插入一行:
  1. package com.**;
    - B# G* ]# }; V* b0 l& P  S
  2. ) E1 z4 ^5 V" w, P$ T
  3. import java.sql.DriverManager;
    7 H# L8 t2 K, o  ^# m' c4 V9 w. C* N) @
  4. import java.sql.Connection;1 `1 l  L$ F4 I6 V
  5. import java.sql.PreparedStatement;
    ( F+ o, j! ]  o, R5 U; x0 ^2 b
  6. import java.sql.ResultSet;, u% T; D9 T: Q5 v/ o) v! B9 n
  7. ; Z/ S) o8 n5 ~' g) e& m0 K

  8. ; Z/ f0 d* N5 l' _8 K
  9. public class ScrollResultUpdate
    " H, V- Q1 m8 T- A1 [5 a
  10. {
    0 h6 W9 s+ A- R0 D' \  D% b8 e
  11.         // 连接驱动路径
    / A. P# y8 Z0 t$ F/ h
  12.         public static final String DRIVER = "com.mysql.jdbc.Driver"; // "org.gjt.mm.mysql.driver"8 G& T5 T3 k4 p5 Y$ T* a
  13.         // 定义数据源URL:数据库地址
    4 u! T6 F5 X. m0 v% d5 L  h( h0 P0 {
  14.         public static final String         DBURL = "jdbc:mysql://localhost:3306/school?characterEncoding=utf8";- A9 I0 X7 _7 W& U
  15.         // 定义数据库登录的用户名:( q) n$ [- Z7 v/ Y! t2 f( k  p
  16.         public static final String USERNAME = "root";# @0 a2 y( W6 K$ S. d; u" t
  17.         // 定义数据库登录的密码:
    4 ^3 A4 h! M) O* N3 j5 |
  18.         public static final String PASSWORD = "123456";
    . |- @7 X7 F. Z& r
  19.        
    ; C) T$ @) G  t
  20.         public static void main(String[] args) throws Exception // 抛出所有异常/ t$ L2 X% G' w& I/ x) f3 L
  21.         {- m; x4 w$ |7 k9 C  a+ ?6 J
  22.                 Connection conn = null;        // 数据库连接6 i! J6 `) i" ~: f2 Y, Q7 f
  23.                 PreparedStatement pstmt = null; // 预编译语句+ a5 R7 B( \0 {' X+ y- a' Q
  24.                 ResultSet rs = null;        // 结果集( i, D) T1 K* m+ q" i$ N' C- _
  25.                 ( `. q# c& r& n: U* C3 |
  26.                 // 加载数据库驱动
    + U9 z# }1 _0 J- n# w
  27.                 Class.forName(DRIVER);# L+ i3 ?% N8 m8 t! A
  28.                 // 获取数据库连接% H. t) `* A6 {% m* n
  29.                 conn = DriverManager.getConnection(DBURL, USERNAME, PASSWORD);  A+ ]8 B, X8 J( k; x
  30.                 String sql = "select id, name, age, sex, birthday from student";8 Z/ t( c" Z( w
  31.                 // 获取可滚动的结果集: 对并发更改敏感,并发可更新,这是jdbc2.0的api
    & I/ N) N3 N. h9 o" \
  32.                 pstmt = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
    3 Q# ~+ K) Z" x% I% _" \
  33.                 // 查询( I: }6 }8 J- S$ ]7 N+ F" J
  34.                 rs = pstmt.executeQuery();               
    5 Y- |5 Z7 F% X
  35.                 // 移动游标到插入行
    4 q+ m, {3 O) v( L
  36.                 rs.moveToInsertRow();       
    9 ^/ G* c) H- j8 s- p) x# s9 }6 ?
  37.                 // 设置插入值/ [: n2 C: f; O% J- e
  38.                 rs.updateString(2, "k187");
    ! K: ]6 V4 q: c/ z( D4 [
  39.                 rs.updateInt(3, 2);
      U: s! r$ Q* d2 b1 u) B  m
  40.                 rs.updateString(4, "女");, L3 s  P, e2 z0 \/ r! q
  41.                 rs.updateDate(5, new java.sql.Date(new java.util.Date().getTime()));        // 日期必须用sql支持的
    # F7 D: i8 i: K  c4 J  w1 W
  42.                 // 执行插入
    0 [2 A: F' H- f" M5 u! F
  43.                 rs.insertRow();
      _4 I( u$ J. b7 X5 Y7 m! n
  44.                 // 移动到当前行:插入的行的前面
    : L- Q1 S6 P  d, S' K! v7 V
  45.                 //rs.moveToCurrentRow(); // 只有insertRow有效,但此时的位置不是插入的行,而是插入的行的前面( X" K0 g0 K! Q: Q" x
  46.                 //rs.last();        // 这才是插入的行
    - L5 u1 A' \$ u+ t
  47.                 rs.next();        // id:1 姓名:王敏 年龄:王敏 性别:女 生日:2009-01-05,这也是插入的行,如果没有这样的操作,print不会打印内容1
    ( N! l3 O+ N' M* m8 m5 h- ]% E
  48.                 print(rs);        // 打印插入的行1 j9 }: _) x/ k
  49.         }' i( b, }4 _: z( F* v! O8 Y
  50.        
    9 p  [: F$ X/ a8 D
  51.         public static void print(ResultSet rs) throws Exception       
    ' a9 {, f0 `& r# O: P
  52.         {               
    1 |, T  N# E0 ^6 O
  53.                 if (rs.getRow() > 0): p% ]! H, {- ]: Z; a4 Y; z7 E
  54.                 {- o# U+ y. ^4 t" {) P- r
  55.                         int id = rs.getInt(1);
    : w' W% t6 n6 _. A, Z4 N
  56.                         String name = rs.getString(2);0 [# c+ s: R3 @
  57.                         int age = rs.getInt(3);
    ( r+ R. i4 r9 f8 i6 e
  58.                         String sex = rs.getString(4);
    # K8 d2 G$ [& @
  59.                         java.util.Date birth = rs.getDate(5);$ H& j- D2 I/ R! V4 u3 D/ h
  60.                        
    ' L: x) l% |( [! c3 R% w2 W% X
  61.                         System.out.println("id:" + id + " 姓名:" + name + " 年龄:" + name + " 性别:" + sex + " 生日:" + birth);" ?' J% B1 k& \& c. [
  62.                 }
    # G; K1 @  s5 y7 D6 a' K
  63.         }
    + f/ K9 F# E8 i. N% v5 r
  64. }
复制代码
---------使用可滚动结果集更新一行:
  1. package com.**;5 M& C; z$ e. ~/ {* {

  2. 9 _" P0 n; I5 {; a9 l* T8 Y. x
  3. import java.sql.DriverManager;
    6 d  @% Z5 @' A5 \# e' L: x
  4. import java.sql.Connection;" V( D& \9 k! q- j1 p
  5. import java.sql.PreparedStatement;5 P' W1 L6 j! c3 m# e4 ~# I
  6. import java.sql.ResultSet;
    ! V1 q4 B0 ^2 a; K( t
  7. 1 }# ^2 `2 [  O* v4 k- W9 o6 ?
  8. ' B/ @! r; @4 L! X" c
  9. public class ScrollResultUpdate
    , _5 {- I5 E7 N$ \  W8 P* M. R( z
  10. {% C; w! k0 S$ D: ^4 ?6 W4 m& o
  11.         // 连接驱动路径4 A. P" L6 O: [8 R( T7 t4 s
  12.         public static final String DRIVER = "com.mysql.jdbc.Driver"; // "org.gjt.mm.mysql.driver"
    ; F! I. E" I/ |1 b1 B! _! r
  13.         // 定义数据源URL:数据库地址
    % c$ R2 e. g. ^- [8 [1 L; m9 w
  14.         public static final String         DBURL = "jdbc:mysql://localhost:3306/school?characterEncoding=utf8";9 M- u8 ^; Y7 p: B$ o
  15.         // 定义数据库登录的用户名:
    3 `) K1 l; I4 Z- M9 Y
  16.         public static final String USERNAME = "root";
    2 b. f! W6 @& h% D) _; u
  17.         // 定义数据库登录的密码:( J1 A. N3 z# I- I! N5 l. h
  18.         public static final String PASSWORD = "123456";$ P2 i9 `- h3 F, L: D
  19.        
    ( D2 B4 t3 x: m  x6 T) z  m
  20.         public static void main(String[] args) throws Exception // 抛出所有异常
    * L8 E; P4 q$ ?1 K& K9 Y* g3 d
  21.         {- u6 I0 e% \9 D7 k- D
  22.                 Connection conn = null;        // 数据库连接
    9 F4 N- e0 e- u9 P( s# n
  23.                 PreparedStatement pstmt = null; // 预编译语句
    & ^1 w3 j& l% `% r" f3 B3 R
  24.                 ResultSet rs = null;        // 结果集5 B; F6 ]4 \6 Z
  25.                
    ) W8 O* D6 ~1 h* a! S
  26.                 // 加载数据库驱动0 t( a' y2 v* e4 Z- @; i1 V, I1 `1 t
  27.                 Class.forName(DRIVER);) y0 a/ y) g( |
  28.                 // 获取数据库连接4 k  I. h1 b7 p0 [/ x
  29.                 conn = DriverManager.getConnection(DBURL, USERNAME, PASSWORD);
    - |- f/ t# C3 j! Y5 f- ^' D: W& v) v
  30.                 String sql = "select id, name, age, sex, birthday from student";
    1 f+ y& X; k5 u. s: p
  31.                 // 获取可滚动的结果集: 对并发更改敏感,并发可更新,这是jdbc2.0的api
    ) Y  ]: y( j1 c0 j
  32.                 pstmt = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);: Y& O# X% J) R
  33.                 // 查询
    $ `$ x( N$ C# O; E$ d1 @3 F
  34.                 rs = pstmt.executeQuery();                $ f$ r5 Z) v$ f% k( Y
  35.                 // 移动游标到更新行1 B7 W: e* f" X: p) _  w) a
  36.                 rs.absolute(5);                       
    6 y- j4 l$ V9 a1 J5 J
  37.                 // 设置更新值1 x+ i% M* R4 d3 o: |% E. B3 _) _
  38.                 rs.updateString("name", "k187");
    + F! @3 q2 G7 i# J# A0 U
  39.                 rs.updateInt(3, 2);; @. `) f5 I8 U* d1 j' c! X; I
  40.                 rs.updateString(4, "女");
    & t5 e7 ]4 z" L/ e
  41.                 rs.updateDate(5, new java.sql.Date(new java.util.Date().getTime()));        // 日期必须用sql支持的; r3 @6 |  k- _! l
  42.                 // 执行更新2 ^1 i& N( @' W/ ?
  43.                 rs.updateRow();
    " n9 O9 m6 V$ t* |
  44.                
    0 V$ \8 d# v- Q& a/ V
  45.                 print(rs);        // 打印更新的行
    4 B5 @. V" l3 c. T1 N
  46.                 : `0 d5 z' r- A
  47.                 rs.close();
    , E9 j1 g' o1 x3 y
  48.                 pstmt.close();2 e8 C$ O, S- E8 \9 r& Q* }
  49.                 conn.close();
    5 h; ]- x" @$ X% X  S% ^" [1 `! f$ [3 [
  50.         }* G* C& n# s, K% E9 W9 O
  51.        
    8 \3 c0 C1 X0 W; k! ~% t2 t0 d
  52.         public static void print(ResultSet rs) throws Exception        3 N$ t7 V8 y9 u1 |
  53.         {                # M# l/ `+ K) m
  54.                 if (rs.getRow() > 0)1 \7 h% G! r% i' K( s$ B& v
  55.                 {
    & I3 o, e. I) f' S# Q& H
  56.                         int id = rs.getInt(1);# H8 M5 O. T0 t! ]; W
  57.                         String name = rs.getString(2);. K" ]9 e3 \3 A/ z
  58.                         int age = rs.getInt(3);
    4 x5 p( P9 d3 X( t4 M2 ^( A
  59.                         String sex = rs.getString(4);' R! i1 ?. w$ i& K: u
  60.                         java.util.Date birth = rs.getDate(5);& D  N2 H- T. o8 ^0 Q# E+ U
  61.                        
    / h* o0 Y  z1 A
  62.                         System.out.println("id:" + id + " 姓名:" + name + " 年龄:" + age + " 性别:" + sex + " 生日:" + birth);
    5 E, v7 v2 i, j; s
  63.                 }  k+ w* ]' d) g8 q3 H% F
  64.         }
    5 S- T( t. l  }* N
  65. }
    $ [! A2 N8 k1 S5 R- O# [, D
  66. /*/ r1 \  Z7 F. m- w- o) p
  67. ubuntu@xu-desktop:~$ java com.**.ScrollResultUpdate2 J" K# H1 z! o" n1 x% r
  68. id:5 姓名:k187 年龄:2 性别:女 生日:2010-04-17$ Z* U$ d/ M7 X% X
  69. // 第5行被更新了!当然也可以采用PreparedStatement对象的set方法设置选择更新哪一行;4 x( ?; r% r5 b. y( t+ ~
  70. */
复制代码
------取消更新:
  1. package com.**;
    . q3 n; ~/ y; A3 X7 f, q' [' v
  2. 1 N0 f6 T' {% v9 D, }
  3. import java.sql.DriverManager;
    & u" D; Q6 a( _; q. b8 `3 @
  4. import java.sql.Connection;
    : b& X7 i7 o% U+ S1 k
  5. import java.sql.PreparedStatement;7 `: ?& a1 l1 K
  6. import java.sql.ResultSet;
    " |  V! d' f- J& _
  7. + P8 ]; ]- Y1 _* T4 Q6 X' Z9 F' }

  8. 5 k+ n, Y7 ^7 J& ~3 [# S( m* [7 f3 I% K
  9. public class ScrollResultUpdate/ B% {3 r9 ]5 S* f! M
  10. {3 X& C1 z+ |7 o& b/ ?  ~
  11.         // 连接驱动路径
    5 d" {% L* `( F. ~8 q
  12.         public static final String DRIVER = "com.mysql.jdbc.Driver"; // "org.gjt.mm.mysql.driver"
    / }# l; d! J0 y' S+ l) x+ X( {# Q
  13.         // 定义数据源URL:数据库地址  d, S7 G  f. P1 I4 ]0 A* M, k
  14.         public static final String         DBURL = "jdbc:mysql://localhost:3306/school?characterEncoding=utf8";
    / e* O& B8 u0 H  u# ~1 s
  15.         // 定义数据库登录的用户名:
    ' F& F0 g* I3 n: n9 b9 W0 E
  16.         public static final String USERNAME = "root";! w* P& u& T2 \+ |( Q; [1 }
  17.         // 定义数据库登录的密码:8 _; d" l' h1 Q0 K* V' Q
  18.         public static final String PASSWORD = "123456";' K9 _* @" R4 T- c5 _
  19.         : H' z' Y4 h/ w3 m) Q
  20.         public static void main(String[] args) throws Exception // 抛出所有异常
    0 p7 }. @- X$ b. D1 [; a
  21.         {
    8 @0 x" k( C0 V' r+ d' r3 D& @
  22.                 Connection conn = null;        // 数据库连接
    9 Y2 |: \; m+ u3 N8 W4 `1 q7 q
  23.                 PreparedStatement pstmt = null; // 预编译语句- a* ~7 F4 i  w
  24.                 ResultSet rs = null;        // 结果集
    6 z, ~  X# g& M# g4 f: O9 j
  25.                 ) P# M1 |( z% x' @
  26.                 // 加载数据库驱动1 L  P( w+ O, k8 |4 r# V6 }/ Q
  27.                 Class.forName(DRIVER);
    ' l+ K3 {- B' J/ ~
  28.                 // 获取数据库连接0 ?$ m9 B9 M1 H4 n; h
  29.                 conn = DriverManager.getConnection(DBURL, USERNAME, PASSWORD);
    : ~3 ~0 l$ s+ n5 c7 {
  30.                 String sql = "select id, name, age, sex, birthday from student";3 S- [1 q7 X1 m5 j9 G* m/ _+ C1 G
  31.                 // 获取可滚动的结果集: 对并发更改敏感,并发可更新,这是jdbc2.0的api
    8 H6 ?6 N  ~# [, o3 B
  32.                 pstmt = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
    9 q3 i) x: M/ d; t  B
  33.                 // 查询
    1 Z7 _' R" X: x* p" Z& ^
  34.                 rs = pstmt.executeQuery();                " \0 ~+ Z& v" V. V$ A9 c
  35.                 // 移动游标到更新行
      c# v3 n2 U+ `* b
  36.                 rs.absolute(5);                        " H' [4 G: w+ @) n) m# A
  37.                 // 设置更新值9 T+ Z+ M- G5 H% ~  S7 v
  38.                 rs.updateString("name", "k187");8 ]5 q  Q: [+ z6 }$ n
  39.                 rs.updateInt(3, 2);" ]$ ]: u; T  n6 F0 [$ t) S
  40.                 rs.updateString(4, "女");1 m* E! u0 t) T7 N$ _0 Y3 U
  41.                 rs.updateDate(5, new java.sql.Date(new java.util.Date().getTime()));        // 日期必须用sql支持的
    / L) j  \/ A7 m* J1 @
  42.                 // 取消更新
    - n8 a1 C. u1 T8 V
  43.                 rs.cancelRowUpdates(); // 只有在更新前面被调用时才可以取消! X" ?, e: b. i* d6 Q" X7 [. U
  44.                 // 执行更新: M8 f* R2 l$ ~# Y. `: Q$ J
  45.                 rs.updateRow();
    , t8 Z! O# L4 L! o( P- B% o
  46.                 , j# H- o& |. `* N
  47.                 2 ]5 P' J4 H" k  Z/ ]
  48.                 print(rs);        // 打印更新的行! T2 _& ^2 I% Q3 r: i: O
  49.                 5 O0 l* e7 ~: G& G, [  N* Q7 o
  50.                 rs.close();, Y8 M8 m! O0 m  z5 S% }7 Y
  51.                 pstmt.close();
    , h2 v8 [5 w$ O  D3 P/ t  S/ v% e0 s
  52.                 conn.close();
    2 ]) l0 Y4 B' G' z( }
  53.         }/ y- A1 Q4 h2 e
  54.         6 l* ~2 T( C' k% i* @
  55.         public static void print(ResultSet rs) throws Exception        : H4 s0 z% I& D  J" E" B
  56.         {               
    9 b' ?1 ^+ Z' p4 v- \
  57.                 if (rs.getRow() > 0)
    : y5 \4 u/ E: H, E8 d$ B# q+ y, L
  58.                 {
    9 a- P$ Y+ P5 u
  59.                         int id = rs.getInt(1);7 A4 B2 O' z& z  Y: ]1 n7 e* m
  60.                         String name = rs.getString(2);
    & r4 m9 r) Z6 P
  61.                         int age = rs.getInt(3);
    " Z& _8 c% X$ [# t& h& Y+ ~* I
  62.                         String sex = rs.getString(4);
    % A/ n' p* J# l2 g( ?0 p
  63.                         java.util.Date birth = rs.getDate(5);# N8 o" |7 k: B- F
  64.                         4 R3 J# |  q: q$ W% n
  65.                         System.out.println("id:" + id + " 姓名:" + name + " 年龄:" + age + " 性别:" + sex + " 生日:" + birth);
    5 D, D/ O2 o  {9 z% j. }, d7 g
  66.                 }
    6 e* ?; o( x5 q
  67.         }8 Z* w  V' L, Z
  68. }
    2 T/ Z! I& N% e; h# j
  69. /*: h. J6 D( c9 c7 r
  70. ubuntu@xu-desktop:~$ java com.**.ScrollResultUpdate
    4 ~9 `1 t& C& m! p3 ]8 a9 k
  71. id:5 姓名:www 年龄:20 性别:女 生日:2010-04-17
    % ~! m5 ?6 H3 }) J. Z- C2 B6 H* b
  72. // 第5行没有被修改
    # ?0 ^+ n* s- B* H* q* t
  73. */
复制代码
-------使用可滚动的结果集删除一行:
  1. package com.**;, |1 U/ N6 o6 r; p2 E7 \* G" {3 B

  2. ; V2 x: c* ^% N* E" T3 q( }* t
  3. import java.sql.DriverManager;7 }9 T5 `2 q: @9 R( Z: p$ S- Z
  4. import java.sql.Connection;
    & S3 @" K5 ]! Z- S7 {. T7 J
  5. import java.sql.PreparedStatement;% g2 w/ _4 I3 d8 a7 N9 O/ h
  6. import java.sql.ResultSet;2 d" f1 _. Q' n, d7 z2 O2 |
  7. " s+ h8 {& f4 H) S# G/ V/ i
  8. : }8 ]  k0 |3 e# K
  9. public class ScrollResultDelete
    . N3 q! X' i2 H1 R
  10. {/ {: p: C$ r+ e" X: N7 j$ n+ _
  11.         // 连接驱动路径) l" A! W5 Y$ P# q5 b
  12.         public static final String DRIVER = "com.mysql.jdbc.Driver"; // "org.gjt.mm.mysql.driver"- B( o, t$ @2 F# e
  13.         // 定义数据源URL:数据库地址
    ) ?/ ?3 q" j, [  U1 ?& T0 j
  14.         public static final String         DBURL = "jdbc:mysql://localhost:3306/school?characterEncoding=utf8";* H% G/ m8 Q6 B0 `' K4 }. P$ V
  15.         // 定义数据库登录的用户名:" Q6 v7 ^) D1 ?  X4 p6 [
  16.         public static final String USERNAME = "root";7 F. y5 ]! _% {  o6 {7 ]: |1 m
  17.         // 定义数据库登录的密码:' X1 {. r( s" ~
  18.         public static final String PASSWORD = "123456";+ o. E+ [4 i# i; h% l7 n. H
  19.         % e) n' C  w3 x' q2 G
  20.         public static void main(String[] args) throws Exception // 抛出所有异常; ^2 K. C0 ?" n/ m% E% S
  21.         {
    3 E2 h. m0 ~, U0 L# l
  22.                 Connection conn = null;        // 数据库连接4 [" h7 M8 J6 D2 J' N
  23.                 PreparedStatement pstmt = null; // 预编译语句
    8 R) k" b0 ]) v8 T' h! K
  24.                 ResultSet rs = null;        // 结果集
    : T4 U: [7 p. d: ?8 s6 d8 Q
  25.                
    : x7 _) P$ n  b/ k  T$ e$ m0 k3 i7 i
  26.                 // 加载数据库驱动
      A$ e( g( F% \3 B! `# |" |
  27.                 Class.forName(DRIVER);$ J- d! x1 ]4 I5 U6 O
  28.                 // 获取数据库连接; Z9 {5 z0 N& }* s& w3 V3 @
  29.                 conn = DriverManager.getConnection(DBURL, USERNAME, PASSWORD);6 X" y) C) y7 j2 V1 f/ D2 u. l* M
  30.                 String sql = "select id, name, age, sex, birthday from student";' D* u% h; o% R8 H% O, d" b0 D& [
  31.                 // 获取可滚动的结果集: 对并发更改敏感,并发可更新,这是jdbc2.0的api
    * F9 d9 z. t% e
  32.                 pstmt = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);' H  n  K4 p6 b. t
  33.                 // 查询
    1 O, W$ u& z8 z. c* n1 p7 X
  34.                 rs = pstmt.executeQuery();               
    $ T% O4 j% s8 P! M
  35.                 // 移动游标到要删除的行
    ; M0 B$ h0 ]8 D3 ~1 A
  36.                 rs.absolute(20);                        ! p+ x& `4 F5 f# @4 W/ b
  37.                
    ; ]4 z% D/ u; H- e; p7 @0 v
  38.                 // 执行删除
    ; K( e- L* b4 K; X; V/ q4 v! F$ p5 H, C  ~
  39.                 rs.deleteRow();" G7 h. T1 @9 |8 X$ O
  40.                                
    # n! `) E3 a! H
  41.                 rs.close();
    * n! |& U  d3 N* Y* h5 j
  42.                 pstmt.close();
    ' s. ^- |4 e4 F# E" I& N5 M8 e
  43.                 conn.close();% p0 G. i+ I) i  E) \+ M
  44.         }       
    3 B8 w1 y( s9 o) X' A& x4 [
  45. }, }% v4 K  P$ p5 P6 e, S5 T- J  U
  46. /*
      R. R# G3 y0 A* ~( `4 u6 p% h
  47. ubuntu@xu-desktop:~$ java com.**.ScrollResultUpdate  ^& h) ?! L, o6 H/ A. z
  48. id:5 姓名:www 年龄:20 性别:女 生日:2010-04-179 M! q2 r' F2 ~* z
  49. // 第5行没有被修改
      a9 E9 u1 U$ G( u) y. m; C1 S+ d% a
  50. //3 x5 z6 N8 J  t. t# f3 e0 R1 u1 w6 m
  51. */
复制代码
// jdbc2.0对结果集的提升很方便,但是效率不高,正常情况下不如直接使用PreparedStatement;

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23525425/viewspace-676424/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2010-10-20

  • 博文量
    20
  • 访问量
    53211