亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

JDBC 概述(五)

2019-11-18 12:40:23
字體:
來源:轉載
供稿:網友

  5 - ResultSet
  5.1 概述
  ResultSet 包含符合 SQL 語句中條件的所有行,并且它通過一套 get 方法(這些 get 方法可以訪問當前行中的不同列)提供了對這些行中數據的訪問。ResultSet.next 方法用于移動到 ResultSet 中的下一行,使下一行成為當前行。
  結果集一般是一個表,其中有查詢所返回的列標題及相應的值。例如,假如查詢為 SELECT a, b, c FROM Table1,則結果集將具有如下形式:
  a b c
  -------- --------- --------
  12345 Cupertino CA
  83472 Redmond WA
  83492 Boston MA
  下面的代碼段是執行 SQL 語句的示例。該 SQL 語句將返回行集合,其中列 1 為 int,列 2 為 String,而列 3 則為字節數組:
  java.sql.Statement stmt = conn.createStatement();
  ResultSet r = stmt.executeQuery("SELECT a, b, c FROM Table1");
  while (r.next())
  {
  // 打印當前行的值。
  int i = r.getInt("a");
  String s = r.getString("b");
  float f = r.getFloat("c");
  System.out.  }
  5.1.1 行和光標
  ResultSet 維護指向其當前數據行的光標。每調用一次 next 方法,光標向下移動一行。最初它位于第一行之前,因此第一次調用 next 將把光標置于第一行上,使它成為當前行。隨著每次調用 next 導致光標向下移動一行,按照從上至下的次序獲取ResultSet 行。
  在 ResultSet 對象或其父輩 Statement 對象關閉之前,光標一直保持有效。
  在 SQL 中,結果表的光標是有名字的。假如
數據庫答應定位更新或定位刪除,則需要將光標的名字作為參數提供給更新或刪除命令??赏ㄟ^調用方法getCursorName 獲得光標名。
  注重:不是所有的 DBMS 都支持定位更新和刪除。可使用 DatabaseMetaData.supportsPositionedDelete 和 supportsPositionedUpdate 方法來檢查特定連接是否支持這些操作。當支持這些操作時,DBMS/驅動程序必須確保適當鎖定選定行,以使定位更新不會導致更新異常或其它并發問題。
  5.1.2 列
  方法 getXXX 提供了獲取當前行中某列值的途徑。在每一行內,可按任何次序獲取列值。但為了保證可移植性,應該從左至右獲取列值,并且一次性地讀取列值。列名或列號可用于標識要從中獲取數據的列。例如,假如 ResultSet 對象 rs 的第二列名為“title”,并將值存儲為字符串,則下列任一代碼將獲取存儲在該列中的值:
  String s = rs.getString("title");
  String s = rs.getString(2);
  注重列是從左至右編號的,并且從列 1 開始。同時,用作 getXXX 方法的輸入的列名不區分大小寫。
  提供使用列名這個選項的目的是為了讓在查詢中指定列名的用戶可使用相同的名字作為 getXXX 方法的參數。另一方面,假如 select 語句未指定列名(例如在“select * from table1”中或列是導出的時),則應該使用列號。這些情況下,
  戶將無法確切知道列名。
  有些情況下,SQL 查詢返回的結果集中可能有多個列具有相同的名字。假如列名用作 getXXX 方法的參數,則 getXXX 將返回第一個匹配列名的值。因而,假如多個列具有相同的名字,則需要使用列索引來確保檢索了正確的列值。這時,使用列號效率要稍微高一些。
  關于 ResultSet 中列的信息,可通過調用方法 ResultSet.getMetaData 得到。返回的 ResultSetMetaData 對象將給出其 ResultSet 對象各列的編號、類型和屬性。
  假如列名已知,但不知其索引,則可用方法 findColumn 得到其列號。
  5.1.3 數據類型和轉換
  對于 getXXX 方法,JDBC 驅動程序試圖將基本數據轉換成指定 Java 類型,然后返回適合的 Java 值。例如,假如 getXXX 方法為 getString,而基本數據庫中數據類型為 VARCHAR,則 JDBC 驅動程序將把 VARCHAR 轉換成 Java String。getString 的返回值將為 Java String 對象。
  下表顯示了答應用 getXXX 獲取的 JDBC 類型及推薦用它獲取的 JDBC 類型(通用SQL 類型)。小寫的 x 表示答應 getXXX 方法獲取該數據類型;大寫的 X 表示對該數據類型推薦使用 getXXX 方法。例如,除了 getBytes 和 getBinaryStream 之外的任何 getXXX 方法都可用來獲取 LONGVARCHAR 值,但是推薦根據返回的數據類型使用 getAsciiStream 或 getUnicodeStream 方法。方法 getObject 將任何數據類型返回為 Java Object。當基本數據類型是特定于數據庫的抽象類型或當通用應用程序需要接受任何數據類型時,它是非常有用的。
  可使用 ResultSet.getXXX 方法獲取常見的 JDBC 數據類型。
  “x”表示該 getXXX 方法可合法地用于獲取給定 JDBC 類型。
  “X”表示推薦使用該 getXXX 方法來獲取給定 JDBC 類型。
  getByte X x x x x x x x x x x x x            
  
  getShort x X x x x x x x x x x x x            
  
  getInt x x X x x x x x x x x x x            
  
  getLong x x x X x x x x x x x x x            
  
  getFloat x x x x X x x x x x x x x            
  
  getDouble x x x x x X X x x x x x x            
  
  getBigDecimal x x x x x x x X X x x x x            
  
  getBoolean x x x x x x x x x X x x x            
  
  getString x x x x x x x x x x X X x x x x x x x
  
  getBytes                           X X x      
  
  getDate                     x x x       X   x
  
  getTime                     x x x         X x
  
  getTimestamp                    x x x    
   x   X
  getAsciiStream                     x x X x x x  
  getUnicodeStream                     x x X x x x      getBinaryStream                     x x X      
  getObject x x x x x x x x x x x x x x x x x x x
  5.1.4 對非常大的行值使用流
  ResultSet 可以獲取任意大的 LONGVARBINARY 或 LONGVARCHAR 數據。方法getBytes 和 getString 將數據返回為大的塊(最大為 Statement.getMaxFieldSize 的返回值)。但是,以較小的固定塊獲取非常大的數據可能會更方便,而這可通過讓 ResultSet 類返回 java.io.Input 流來完成。從該流中可分塊讀取數據。注重:必須立即訪問這些流,因為在下一次對 ResultSet 調用getXXX 時它們將自動關閉(這是由于基本實現對大塊數據訪問有限制)。
  JDBC API 具有三個獲取流的方法,分別具有不同的返回值:
  getBinaryStream 返回只提供數據庫原字節而不進行任何轉換的流。
  getAsciiStream 返回提供單字節 ASCII 字符的流。
  getUnicodeStream 返回提供雙字節 Unicode 字符的流。
  注重:它不同于 Java 流,后者返回無類型字節并可(例如)通用于 ASCII 和Unicode 字符。
  下列代碼演示了 getAsciiStream 的用法:
  java.sql.Statement stmt = con.createStatement();
  ResultSet r = stmt.executeQuery("SELECT x FROM Table2");
  // 現在以 4K 塊大小獲取列 1 結果:
  byte buff = new byte[4096];
  while (r.next()) {
  Java.io.InputStream fin = r.getAsciiStream(1);
  for (;;) {
  int size = fin.read(buff);
  if (size == -1) { // 到達流末尾
  break;
  }
  // 將新填充的緩沖區發送到 ASCII 輸出流:
  output.write(buff, 0, size);
  }
  }
  5.1.5 NULL 結果值
  要確定給定結果值是否是 JDBC NULL,必須先讀取該列,然后使用 ResultSet.wasNull 方法檢查該次讀取是否返回 JDBC NULL。
  當使用 ResultSet.getXXX 方法讀取 JDBC NULL 時,方法 wasNull 將返回下列值之一:
  Java null 值:對于返回 Java 對象的 getXXX 方法(例如 getString、getBigDecimal、getBytes、getDate、getTime、getTimestamp、getAsciiStream、getUnicodeStream、getBinaryStream、getObject 等)。
  零值:對于 getByte、getShort、getInt、getLong、getFloat 和 getDouble。
  false 值:對于 getBoolean。
  5.1.6 可選結果集或多結果集
  通常使用 executeQuery(它返回單個 ResultSet)或 executeUpdate(它可用于任何數據庫修改語句,并返回更新行數)可執行 SQL 語句。但有些情況下,應用程序在執行語句之前不知道該語句是否返回結果集。此外,有些已存儲過程可能返回幾個不同的結果集和/或更新計數。
  為了適應這些情況,JDBC 提供了一種機制,答應應用程序執行語句,然后處理由結果集和更新計數組成的任意集合。這種機制的原理是首先調用一個完全通用的execute 方法,然后調用另外三個方法,getResultSet、getUpdateCount 和getMoreResults。這些方法答應應用程序一次一個地研究語句結果,并確定給定結果是 ResultSet 還是更新計數。
  為了適應這些情況,JDBC 提供了一種機制,答應應用程序執行語句,然后處理由結果集和更新計數組成的任意集合。這種機制的原理是首先調用一個完全通用的execute 方法,然后調用另外三個方法,getResultSet、getUpdateCount 和getMoreResults。這些方法答應應用程序一次一個地研究語句結果,并確定給定結
  果是 ResultSet 還是更新計數。
  用戶不必關閉 ResultSet;當產生它的 Statement 關閉、重新執行或用于從多結果序列中獲取下一個結果時,該 ResultSet

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久久久久久av| 精品激情国产视频| 免费99精品国产自在在线| 精品久久香蕉国产线看观看gif| 黄色成人在线播放| 国产精品三级美女白浆呻吟| 欧美日韩免费在线观看| 日本精品视频在线| 欧美三级免费观看| 91精品视频大全| 欧洲亚洲免费视频| 国产精品高精视频免费| 秋霞av国产精品一区| 亚洲网站在线播放| 成人免费观看a| 青草热久免费精品视频| 欧美亚洲第一页| 97国产在线观看| 91在线免费视频| 亚洲japanese制服美女| 一区二区三区www| 久久免费视频网| 欧美理论片在线观看| 7m精品福利视频导航| 青草热久免费精品视频| 成人观看高清在线观看免费| 91av在线视频观看| 色婷婷综合成人av| 精品成人在线视频| 欧美一区深夜视频| 日韩视频在线观看免费| 精品亚洲aⅴ在线观看| 国外成人在线视频| 久久久av网站| 国产精品中文在线| 45www国产精品网站| 66m—66摸成人免费视频| 在线看片第一页欧美| 国产欧美一区二区三区久久人妖| 成人在线播放av| 精品一区二区电影| 国产精品偷伦免费视频观看的| 亚洲人成亚洲人成在线观看| 日韩精品亚洲元码| 一区二区三区美女xx视频| 欧美黑人性生活视频| 国产精品自产拍在线观看中文| 亚洲免费视频观看| 91日韩在线视频| 日本a级片电影一区二区| 欧美精品激情blacked18| 亚洲欧洲日韩国产| 成人a免费视频| 日韩精品视频免费| 伊人精品在线观看| 国产精自产拍久久久久久蜜| 亚洲电影在线看| 亚洲淫片在线视频| 欧美国产欧美亚洲国产日韩mv天天看完整| 日本一区二区在线播放| 国产亚洲精品久久久优势| 91精品视频在线看| 色综合久久悠悠| 在线看福利67194| 欧美性生交xxxxxdddd| 亚洲伦理中文字幕| 日韩欧美成人精品| 久青草国产97香蕉在线视频| 精品成人久久av| 精品久久久久久久久久久久久久| 亚洲欧美中文字幕在线一区| 九九热最新视频//这里只有精品| 国产精品久久久久久久久久免费| 国内精品国产三级国产在线专| 亚洲电影免费观看高清完整版在线| 国产一区二区色| 青青青国产精品一区二区| 欧美激情视频播放| 热久久这里只有精品| 91国内免费在线视频| 欧美大片在线影院| 亚洲天堂成人在线视频| 伊人久久综合97精品| 精品亚洲一区二区三区在线播放| 国产91av在线| 日韩精品免费在线播放| 国产精品一区二区3区| 日韩精品丝袜在线| 精品国内亚洲在观看18黄| 日韩欧美在线网址| 久久夜色精品国产欧美乱| 中文字幕免费精品一区| 国产精品毛片a∨一区二区三区|国| 久久久久久久一区二区三区| 在线观看欧美成人| 久久不射热爱视频精品| 亚洲精品国产精品国自产在线| 国产精品影院在线观看| 亚洲欧美一区二区精品久久久| 日韩高清电影免费观看完整| 精品国产乱码久久久久久虫虫漫画| 国产亚洲精品久久久| 亚洲自拍偷拍一区| 国产做受69高潮| 国产精品视频yy9099| 亚洲天堂精品在线| 国产中文日韩欧美| 亚洲精品一区中文| 亚洲一级片在线看| 成人h片在线播放免费网站| 久久视频这里只有精品| 亚州精品天堂中文字幕| 在线观看中文字幕亚洲| 欧美成人免费视频| 久久久精品国产一区二区| 亚洲欧美日韩中文视频| 亚洲欧美中文日韩在线v日本| 一区二区三区回区在观看免费视频| 国产99视频精品免视看7| 91在线视频九色| 日韩欧美在线字幕| 91香蕉嫩草神马影院在线观看| 国产91|九色| 一本色道久久88综合亚洲精品ⅰ| 精品欧美国产一区二区三区| 红桃视频成人在线观看| 亚洲乱亚洲乱妇无码| 97avcom| 日韩精品www| 国产精品久久99久久| 91精品国产乱码久久久久久久久| 亚洲欧洲日本专区| 国产精品久久久久久久久久免费| 国产精品自产拍高潮在线观看| 欧美与欧洲交xxxx免费观看| 欧美高清视频免费观看| 在线亚洲国产精品网| 尤物yw午夜国产精品视频| 国产精品美女www爽爽爽视频| 亚洲欧美在线一区二区| 成人免费网站在线观看| 国产成人一区二区在线| 亚洲网站在线观看| 91免费观看网站| 国产精品久久久久久av福利| 国产精品极品在线| 在线观看亚洲区| 久久99青青精品免费观看| 久精品免费视频| 亚洲欧美制服丝袜| 亚洲第一网站男人都懂| 国产精品一区二区久久精品| 国产精品久久久久影院日本| 亚洲国产精品久久久久秋霞不卡| 日韩欧美国产黄色| 国产精品自拍偷拍视频| 精品亚洲一区二区三区四区五区| 亚洲成年网站在线观看| 欧美日韩国产丝袜另类| 97精品国产91久久久久久| 欧美一级bbbbb性bbbb喷潮片| 亚洲福利精品在线| www.精品av.com| 久久久久久久影院|