狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美jjzz_一区在线视频观看_美脚丝袜一区二区三区在线观看_欧美91视频

當(dāng)前位置:系統(tǒng)之家 > 技術(shù)開發(fā)教程 > 詳細(xì)頁(yè)面

JDBCTM 向?qū)В夯A(chǔ)5 - ResultSet

JDBCTM 向?qū)В夯A(chǔ)5 - ResultSet

更新時(shí)間:2019-08-23 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

5 - ResultSet
本概述是從《JDBCTM Database Access from JavaTM: A Tutorial and Annotated Reference 》這本書中摘引來的。JavaSoft 目前正在準(zhǔn)備這本書。這是一本教程,同時(shí)也是 JDBC 的重要參考手冊(cè),它將作為 Java 系列的組成部份在 1997 年春季由 Addison-Wesley 出版公司出版。


5.1 概述
ResultSet 包含符合 SQL 語句中條件的所有行,并且它通過一套 get 方法(這些 get 方法可以訪問當(dāng)前行中的不同列)提供了對(duì)這些行中數(shù)據(jù)的訪問。ResultSet.next 方法用于移動(dòng)到 ResultSet 中的下一行,使下一行成為當(dāng)前行。

結(jié)果集一般是一個(gè)表,其中有查詢所返回的列標(biāo)題及相應(yīng)的值。例如,如果查詢?yōu)?SELECT a, b, c FROM Table1,則結(jié)果集將具有如下形式:


a b c
-------- --------- --------
12345 Cupertino CA
83472 Redmond WA
83492 Boston MA


下面的代碼段是執(zhí)行 SQL 語句的示例。該 SQL 語句將返回行集合,其中列 1 為 int,列 2 為 String,而列 3 則為字節(jié)數(shù)組:


java.sql.Statement stmt = conn.createStatement();
ResultSet r = stmt.executeQuery("SELECT a, b, c FROM Table1");
while (r.next())
{
// 打印當(dāng)前行的值。
int i = r.getInt("a");
String s = r.getString("b");
float f = r.getFloat("c");
System.out.println("ROW = " + i + " " + s + " " + f);
}

5.1.1 行和光標(biāo)
ResultSet 維護(hù)指向其當(dāng)前數(shù)據(jù)行的光標(biāo)。每調(diào)用一次 next 方法,光標(biāo)向下移動(dòng)一行。最初它位于第一行之前,因此第一次調(diào)用 next 將把光標(biāo)置于第一行上,使它成為當(dāng)前行。隨著每次調(diào)用 next 導(dǎo)致光標(biāo)向下移動(dòng)一行,按照從上至下的次序獲取 ResultSet 行。

在 ResultSet 對(duì)象或其父輩 Statement 對(duì)象關(guān)閉之前,光標(biāo)一直保持有效。

在 SQL 中,結(jié)果表的光標(biāo)是有名字的。如果數(shù)據(jù)庫(kù)允許定位更新或定位刪除,則需要將光標(biāo)的名字作為參數(shù)提供給更新或刪除命令?赏ㄟ^調(diào)用方法 getCursorName 獲得光標(biāo)名。

注意:不是所有的 DBMS 都支持定位更新和刪除?墒褂 DatabaseMetaData.supportsPositionedDelete 和 supportsPositionedUpdate 方法來檢查特定連接是否支持這些操作。當(dāng)支持這些操作時(shí),DBMS/驅(qū)動(dòng)程序必須確保適當(dāng)鎖定選定行,以使定位更新不會(huì)導(dǎo)致更新異常或其它并發(fā)問題。


5.1.2 列
方法 getXXX 提供了獲取當(dāng)前行中某列值的途徑。在每一行內(nèi),可按任何次序獲取列值。但為了保證可移植性,應(yīng)該從左至右獲取列值,并且一次性地讀取列值。

列名或列號(hào)可用于標(biāo)識(shí)要從中獲取數(shù)據(jù)的列。例如,如果 ResultSet 對(duì)象 rs 的第二列名為“title”,并將值存儲(chǔ)為字符串,則下列任一代碼將獲取存儲(chǔ)在該列中的值:

String s = rs.getString("title");
String s = rs.getString(2);

注意列是從左至右編號(hào)的,并且從列 1 開始。同時(shí),用作 getXXX 方法的輸入的列名不區(qū)分大小寫。

提供使用列名這個(gè)選項(xiàng)的目的是為了讓在查詢中指定列名的用戶可使用相同的名字作為 getXXX 方法的參數(shù)。另一方面,如果 select 語句未指定列名(例如在“select * from table1”中或列是導(dǎo)出的時(shí)),則應(yīng)該使用列號(hào)。這些情況下,用戶將無法確切知道列名。

有些情況下,SQL 查詢返回的結(jié)果集中可能有多個(gè)列具有相同的名字。如果列名用作 getXXX 方法的參數(shù),則 getXXX 將返回第一個(gè)匹配列名的值。因而,如果多個(gè)列具有相同的名字,則需要使用列索引來確保檢索了正確的列值。這時(shí),使用列號(hào)效率要稍微高一些。

關(guān)于 ResultSet 中列的信息,可通過調(diào)用方法 ResultSet.getMetaData 得到。返回的 ResultSetMetaData 對(duì)象將給出其 ResultSet 對(duì)象各列的編號(hào)、類型和屬性。

如果列名已知,但不知其索引,則可用方法 findColumn 得到其列號(hào)。


5.1.3 數(shù)據(jù)類型和轉(zhuǎn)換
對(duì)于 getXXX 方法,JDBC 驅(qū)動(dòng)程序試圖將基本數(shù)據(jù)轉(zhuǎn)換成指定 Java 類型,然后返回適合的 Java 值。例如,如果 getXXX 方法為 getString,而基本數(shù)據(jù)庫(kù)中數(shù)據(jù)類型為 VARCHAR,則 JDBC 驅(qū)動(dòng)程序?qū)?VARCHAR 轉(zhuǎn)換成 Java String。getString 的返回值將為 Java String 對(duì)象。

下表顯示了允許用 getXXX 獲取的 JDBC 類型及推薦用它獲取的 JDBC 類型(通用 SQL 類型)。小寫的 x 表示允許 getXXX 方法獲取該數(shù)據(jù)類型;大寫的 X 表示對(duì)該數(shù)據(jù)類型推薦使用 getXXX 方法。例如,除了 getBytes 和 getBinaryStream 之外的任何 getXXX 方法都可用來獲取 LONGVARCHAR 值,但是推薦根據(jù)返回的數(shù)據(jù)類型使用 getAsciiStream 或 getUnicodeStream 方法。方法 getObject 將任何數(shù)據(jù)類型返回為 Java Object。當(dāng)基本數(shù)據(jù)類型是特定于數(shù)據(jù)庫(kù)的抽象類型或當(dāng)通用應(yīng)用程序需要接受任何數(shù)據(jù)類型時(shí),它是非常有用的。

可使用 ResultSet.getXXX 方法獲取常見的 JDBC 數(shù)據(jù)類型。

“x”表示該 getXXX 方法可合法地用于獲取給定 JDBC 類型。

“X”表示推薦使用該 getXXX 方法來獲取給定 JDBC 類型。

  T
I
N
Y
I
N
T S
M
A
L
L
I
N
T I
N
T
E
G
E
R B
I
G

N
T R
E
A
L F
L
O
A
T D
O
U
B
L
E D
E
C
I
M
A
L N
U
M
E
R
I
C B
I
T C
H
A
R V
A
R
C
H
A
R
L
O
N
G
V
A
R
C
H
A
R B
I
N
A
R
Y V
A
R
B
I
N
A
R
Y L
O
N
G
V
A
R
B
I
N
A
R
Y D
A
T
E T
I
M
E T
I
M
E
S
T
A
M
P
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 對(duì)非常大的行值使用流
ResultSet 可以獲取任意大的 LONGVARBINARY 或 LONGVARCHAR 數(shù)據(jù)。方法 getBytes 和 getString 將數(shù)據(jù)返回為大的塊(最大為 Statement.getMaxFieldSize 的返回值)。但是,以較小的固定塊獲取非常大的數(shù)據(jù)可能會(huì)更方便,而這可通過讓 ResultSet 類返回 java.io.Input 流來完成。從該流中可分塊讀取數(shù)據(jù)。注意:必須立即訪問這些流,因?yàn)樵谙乱淮螌?duì) ResultSet 調(diào)用 getXXX 時(shí)它們將自動(dòng)關(guān)閉(這是由于基本實(shí)現(xiàn)對(duì)大塊數(shù)據(jù)訪問有限制)。

JDBC API 具有三個(gè)獲取流的方法,分別具有不同的返回值:


getBinaryStream 返回只提供數(shù)據(jù)庫(kù)原字節(jié)而不進(jìn)行任何轉(zhuǎn)換的流。


getAsciiStream 返回提供單字節(jié) ASCII 字符的流。


getUnicodeStream 返回提供雙字節(jié) Unicode 字符的流。


注意:它不同于 Java 流,后者返回?zé)o類型字節(jié)并可(例如)通用于 ASCII 和 Unicode 字符。

下列代碼演示了 getAsciiStream 的用法:

java.sql.Statement stmt = con.createStatement();
ResultSet r = stmt.executeQuery("SELECT x FROM Table2");
// 現(xiàn)在以 4K 塊大小獲取列 1 結(jié)果:
byte buff = new byte[4096];
while (r.next()) {
Java.io.InputStream fin = r.getAsciiStream(1);
for (;;) {
int size = fin.read(buff);
if (size == -1) { // 到達(dá)流末尾
break;
}
// 將新填充的緩沖區(qū)發(fā)送到 ASCII 輸出流:
output.write(buff, 0, size);
}
}

5.1.5 NULL 結(jié)果值
要確定給定結(jié)果值是否是 JDBC NULL,必須先讀取該列,然后使用 ResultSet.wasNull 方法檢查該次讀取是否返回 JDBC NULL。

當(dāng)使用 ResultSet.getXXX 方法讀取 JDBC NULL 時(shí),方法 wasNull 將返回下列值之一:


Java null 值:對(duì)于返回 Java 對(duì)象的 getXXX 方法(例如 getString、getBigDecimal、getBytes、getDate、getTime、getTimestamp、getAsciiStream、getUnicodeStream、getBinaryStream、getObject 等)。


零值:對(duì)于 getByte、getShort、getInt、getLong、getFloat 和 getDouble。


false 值:對(duì)于 getBoolean。


5.1.6 可選結(jié)果集或多結(jié)果集
通常使用 executeQuery(它返回單個(gè) ResultSet)或 executeUpdate(它可用于任何數(shù)據(jù)庫(kù)修改語句,并返回更新行數(shù))可執(zhí)行 SQL 語句。但有些情況下,應(yīng)用程序在執(zhí)行語句之前不知道該語句是否返回結(jié)果集。此外,有些已存儲(chǔ)過程可能返回幾個(gè)不同的結(jié)果集和/或更新計(jì)數(shù)。

為了適應(yīng)這些情況,JDBC 提供了一種機(jī)制,允許應(yīng)用程序執(zhí)行語句,然后處理由結(jié)果集和更新計(jì)數(shù)組成的任意集合。這種機(jī)制的原理是首先調(diào)用一個(gè)完全通用的 execute 方法,然后調(diào)用另外三個(gè)方法,getResultSet、getUpdateCount 和 getMoreResults。這些方法允許應(yīng)用程序一次一個(gè)地研究語句結(jié)果,并確定給定結(jié)果是 ResultSet 還是更新計(jì)數(shù)。

用戶不必關(guān)閉 ResultSet;當(dāng)產(chǎn)生它的 Statement 關(guān)閉、重新執(zhí)行或用于從多結(jié)果序列中獲取下一個(gè)結(jié)果時(shí),該 ResultSet 將被 Statement 自動(dòng)關(guān)閉。

溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

本類教程下載

系統(tǒng)下載排行

狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美jjzz_一区在线视频观看_美脚丝袜一区二区三区在线观看_欧美91视频
色婷婷亚洲综合| 在线国产日韩| 亚洲黄色成人久久久| 日韩欧美精品三级| 日韩不卡在线观看日韩不卡视频| 午夜精品电影| 欧美大度的电影原声| 99国产精品99久久久久久| 欧美精品在线一区二区三区| 婷婷成人综合网| 一本一本久久| 国产欧美一区二区三区在线老狼| 九色|91porny| 欧美亚洲尤物久久| 亚洲成人午夜电影| 老鸭窝毛片一区二区三区| 国产精品久久久久影院老司| 成人黄色一级视频| 日韩三级免费观看| 国产精品一区免费在线观看| 欧美最猛性xxxxx直播| 性做久久久久久久久| 欧美三级午夜理伦三级中视频| 日本va欧美va瓶| 日本精品一级二级| 日韩国产精品久久久| 欧美一区二区三区四区视频| 国产乱码精品一品二品| 欧美国产日产图区| 国产一区美女| 自拍偷自拍亚洲精品播放| 狠狠色伊人亚洲综合网站色| 国产精品国模大尺度视频| 久久久精品五月天| 美女mm1313爽爽久久久蜜臀| 欧美日韩精品一二三区| 精彩视频一区二区| 国产色产综合色产在线视频 | 亚洲码国产岛国毛片在线| 好吊色欧美一区二区三区视频| 午夜视频一区在线观看| 日韩精品一区二区三区视频在线观看| 狠狠爱综合网| 国产一区福利在线| 久久综合九色综合欧美就去吻| 99久久久久免费精品国产| 亚洲一区二区三区四区五区黄| 国产欧美一区二区三区国产幕精品| 九九久久精品视频| 一区二区三区四区在线免费观看 | 亚洲色图欧美偷拍| 7777精品伊人久久久大香线蕉经典版下载 | 国产欧美一区二区精品忘忧草 | 中文字幕佐山爱一区二区免费| 欧美午夜电影一区| 亚洲黄色av| www.久久精品| 中文字幕一区二区在线观看| 99精品99久久久久久宅男| 亚洲va欧美va国产va天堂影院| 精品91自产拍在线观看一区| 亚洲午夜精品久久久久久浪潮| 夜夜嗨一区二区| 国产精品88888| 亚洲国产三级在线| 91福利小视频| 亚洲毛片一区| 91视视频在线观看入口直接观看www | 欧美视频导航| 五月天一区二区三区| 国产日韩欧美激情| 日韩一级视频免费观看在线| 久久免费高清| 一区二区国产在线观看| 91浏览器入口在线观看| 国产黑丝在线一区二区三区| 亚洲四区在线观看| 2023国产一二三区日本精品2022| 欧美手机在线视频| 久久国产主播精品| 一本一道久久综合狠狠老精东影业| 99久久精品国产导航| 国产美女精品在线| 麻豆高清免费国产一区| 午夜视黄欧洲亚洲| 亚洲自拍偷拍图区| 亚洲欧洲av在线| 国产免费久久精品| 欧美精品一区二区在线播放 | 欧美三区免费完整视频在线观看| 亚洲欧美日韩另类精品一区二区三区| 国产精品一区一区三区| 日本不卡中文字幕| 天天亚洲美女在线视频| 亚洲一区二区三区在线| 亚洲欧洲精品一区二区三区不卡| 国产视频911| 国产日韩精品一区二区浪潮av| 日韩精品一区二区三区老鸭窝| 欧美日本在线观看| 一本久久综合亚洲鲁鲁五月天| 国产日韩欧美一区在线| 99国产欧美另类久久久精品| jizzjizzjizz欧美| 99精品视频一区| 91在线观看下载| 91亚洲国产成人精品一区二区三| www.亚洲精品| 91在线视频免费观看| 91美女视频网站| 欧美在线免费一级片| 国产一区二区免费看| 国产伦理精品不卡| 国产白丝网站精品污在线入口| 日韩专区中文字幕一区二区| 国产精品人成在线观看免费| 精品久久久久久综合日本欧美| 欧洲视频一区二区| 欧美在线色视频| 91麻豆精品国产91久久久久久久久| 在线成人av影院| 日韩欧美久久一区| 久久精品日韩一区二区三区| 国产精品久久久久国产精品日日| 18成人在线观看| 亚洲成人av电影| 美女网站一区二区| 高清不卡一区二区在线| 女女同性精品视频| 一区二区动漫| 欧美午夜宅男影院| 久久97超碰色| 国产精品1区2区3区| 波多野结衣的一区二区三区| 国模大胆一区二区三区| 国产精品久久久对白| 欧美综合亚洲图片综合区| 欧美剧在线免费观看网站 | 91精品午夜视频| 久久久久久亚洲综合| 欧美精品 日韩| 国产亚洲女人久久久久毛片| 亚洲欧美激情一区二区| 日本亚洲电影天堂| 成人精品小蝌蚪| av资源站一区| 亚洲国产合集| 欧美日韩亚洲综合一区二区三区| 精品国产乱码久久久久久蜜臀| 最新热久久免费视频| 日本亚洲三级在线| www.日本不卡| 午夜在线精品| 欧美成人精品高清在线播放| 亚洲欧美另类久久久精品2019| 久久99热狠狠色一区二区| 国产精品综合av一区二区国产馆| 欧美在线高清| 色婷婷激情综合| 国产亚洲欧美一区在线观看| 亚洲成人资源在线| 成人avav影音| 久久久久久久欧美精品| 久久亚洲精品小早川怜子| 亚洲一区二区影院| 成人黄色网址在线观看| 亚洲一区不卡| 久久综合九色99| 久久婷婷一区二区三区| 午夜电影久久久| 欧美一区二区| 欧美伊人精品成人久久综合97 | 蜜臀av性久久久久蜜臀aⅴ四虎| 色综合久久综合网97色综合| 欧美午夜一区| 欧美色综合天天久久综合精品| 欧美国产精品劲爆| 琪琪一区二区三区| 黄色精品一区| 日韩一区二区三区观看| 亚洲自拍偷拍网站| 欧美在线不卡| 正在播放亚洲一区| 亚洲高清免费观看高清完整版在线观看| 国产高清在线观看免费不卡| 亚洲男人影院| 国产精品全国免费观看高清| 国产一区二区伦理片| 久久精品一区二区国产| 国产精品日韩成人| 国产69精品一区二区亚洲孕妇| 美日韩精品免费| 中文字幕亚洲综合久久菠萝蜜| 国产91在线|亚洲| 欧美伊人精品成人久久综合97| 亚洲欧美日本韩国| 91看片淫黄大片一级在线观看| 欧美日韩dvd在线观看| 偷窥国产亚洲免费视频| 亚洲最新在线|