狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美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精品国产一区二区三区不卡| 久久国产日韩欧美精品| 欧美一区日韩一区| 欧美不卡在线视频| 欧美r级电影在线观看| 91精品视频网| 欧美va亚洲va| 国产精品欧美一级免费| 中文字幕一区二区三区在线不卡 | 亚洲免费在线观看| 亚洲曰韩产成在线| 黄页网站大全一区二区| av电影在线观看不卡| 亚洲午夜精品久久久久久app| 香港久久久电影| 欧美区视频在线观看| 久久久精品国产免大香伊| 亚洲欧美电影一区二区| 青青草原综合久久大伊人精品| 国产最新精品免费| 亚洲精品偷拍| 精品国产免费久久| 亚洲欧洲日产国产综合网| 男女男精品视频网| 欧美久久久久| 884aa四虎影成人精品一区| 国产精品毛片高清在线完整版| 日本aⅴ亚洲精品中文乱码| 色综合一区二区| 在线视频综合导航| 一区二区三区在线免费视频| 国产成人免费视频一区| 亚洲精品一级| 久久综合久久综合亚洲| 男人操女人的视频在线观看欧美| 色综合天天综合网天天看片| 欧美日韩一区二区三区在线看| 亚洲免费伊人电影| 国产精品分类| 中文字幕第一区综合| 成人av在线播放网址| 欧美一级日韩免费不卡| 日本aⅴ免费视频一区二区三区 | 在线视频国产一区| 一区二区久久久| 国产综合精品| 亚洲欧美色图小说| 欧美日韩亚洲一区| 国产日韩综合av| 午夜久久影院| 国产日韩欧美激情| 欧美成人在线免费观看| 久久久美女毛片| 欧美高清日韩| 亚洲特级片在线| 欧美午夜影院| 日日摸夜夜添夜夜添国产精品| 制服丝袜成人动漫| 伊人成人在线| 国产一区二区三区黄视频 | 国产91精品一区二区| 国产午夜精品一区二区三区嫩草| 99久久国产综合色|国产精品| 国产欧美日韩三区| 久久亚洲一区| www.日韩大片| 亚洲国产欧美在线| 欧美zozozo| 国产视频一区三区| 国产大陆亚洲精品国产| 亚洲色图19p| 日韩欧美国产高清| 亚洲美女视频在线免费观看 | 91精品福利在线一区二区三区 | 久久视频一区| 欧美日韩综合精品| 成人精品视频一区| 国产精品三级久久久久三级| 不卡的看片网站| 国产精品―色哟哟| 欧美性猛交xxxx黑人交| 激情丁香综合| 欧美啪啪一区| 欧美一区二区三区在线播放| 国产在线精品一区二区夜色| 日韩精品国产欧美| 首页亚洲欧美制服丝腿| 亚洲免费成人av| 亚洲视频一区二区在线观看| 国产日韩欧美综合一区| 久久久久久**毛片大全| 精品国产乱码久久久久久夜甘婷婷 | 乱中年女人伦av一区二区| 国产美女在线观看一区| 亚洲激情一区二区三区| 久久综合av免费| 国产精品一区在线| 亚洲欧美卡通另类91av| 精品国产成人系列| 激情五月婷婷综合| 欧美图区在线视频| 亚洲一区日韩精品中文字幕| 国产精品hd| 91精品国产手机| 久久福利资源站| 玖玖玖国产精品| 国产精品天干天干在观线| 国产精品你懂的在线| 黑人巨大精品欧美一区| 国产不卡视频一区二区三区| 国产精品一卡二卡在线观看| 99久久99久久精品免费看蜜桃| 国产在线不卡| 久久久久看片| 亚洲欧洲另类国产综合| 国产福利91精品一区二区三区| 亚洲国产一区二区三区a毛片 | 亚洲一区在线观看免费| 国产在线精品免费| 中国女人久久久| 久久亚洲免费视频| 视频一区欧美日韩| 黄色成人91| 欧美挠脚心视频网站| 综合电影一区二区三区 | 国产精品一二二区| 玖玖九九国产精品| 美国毛片一区二区| 成a人片国产精品| 裸体丰满少妇做受久久99精品| 精品日产卡一卡二卡麻豆| 国产精品成人网| 国产suv一区二区三区88区| 国产欧美日韩一区二区三区在线| 日韩精品一区二区三区四区视频 | 亚洲精品视频在线| 久久久精品日韩欧美| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 91女厕偷拍女厕偷拍高清| 色就色 综合激情| 欧美激情一区三区| 蜜臀久久久久久久| 国产一区二区日韩精品| 99香蕉国产精品偷在线观看| 91成人网在线| 国产精品污www在线观看| 国产成人av一区二区三区在线观看| 国产精品一区二区你懂得| 2021久久国产精品不只是精品| 久久99精品久久久久久动态图| 色久综合一二码| 亚洲免费观看高清完整版在线观看熊| 激情综合网天天干| 国产精品日韩欧美一区二区| 在线电影一区二区三区| 一区二区三区免费在线观看| 亚洲高清激情| 亚洲欧洲制服丝袜| 中文一区在线| 日本亚洲欧美天堂免费| 国产九九精品| 一级特黄大欧美久久久| 99re6这里只有精品视频在线观看| 色老汉一区二区三区| 青青草91视频| 日韩欧美123| 狠狠色狠狠色综合日日tαg| 伊人开心综合网| 欧美日韩一区二区不卡| 国产98色在线|日韩| 国产精品久久精品日日| 色欧美乱欧美15图片| 91影视在线播放| 亚洲成人先锋电影| 日韩你懂的在线观看| 国产精品一区二区欧美| 东方aⅴ免费观看久久av| 一区二区三区高清在线| 日韩一区二区三| 欧美久久久久久| 国产美女一区二区| 成熟亚洲日本毛茸茸凸凹| 国产一区二区成人久久免费影院 | 欧美日韩国产在线观看| 99综合精品| 久久久久久国产精品mv| 久久在线91| 在线欧美小视频| 9191国产精品| 久久久国产精华| 亚洲午夜精品一区二区三区他趣| 亚洲自拍偷拍图区| 一区二区三区欧美视频| 亚洲午夜三级在线| 日本最新不卡在线| 亚洲成a人v欧美综合天堂下载| 精品盗摄一区二区三区| 先锋影音久久久| 欧美激情视频一区二区三区在线播放 | 久久久久久精|