JDBC 結(jié)果集(ResultSet)

從數(shù)據(jù)庫(kù)查詢中讀取數(shù)據(jù)的 SQL 語(yǔ)句返回結(jié)果集中的數(shù)據(jù)。SELECT 語(yǔ)句是從數(shù)據(jù)庫(kù)中選擇行并在結(jié)果集中查看它們的標(biāo)準(zhǔn)方法。Sql.ResultSet 接口表示數(shù)據(jù)庫(kù)查詢的結(jié)果集。

ResultSet 對(duì)象維護(hù)一個(gè)指向結(jié)果集中當(dāng)前行的游標(biāo)。術(shù)語(yǔ)“結(jié)果集(result set)”指的是 ResultSet 對(duì)象中包含的行和列數(shù)據(jù)。

ResultSet接口的方法可以分為三類-

  • 導(dǎo)航方法: 用于左右移動(dòng)光標(biāo)。

  • Get方法: 用于查看光標(biāo)所指向的當(dāng)前行的列中的數(shù)據(jù)。

  • Update方法:用于更新當(dāng)前行各列中的數(shù)據(jù)。然后,更新也可以在基礎(chǔ)數(shù)據(jù)庫(kù)中更新。

光標(biāo)可根據(jù)ResultSet的屬性移動(dòng)。這些屬性是在創(chuàng)建相應(yīng)的生成ResultSet的Statement時(shí)指定的。

JDBC提供以下連接方法來(lái)創(chuàng)建具有所需ResultSet的語(yǔ)句-

  • createStatement(int RSType, int RSConcurrency);

  • prepareStatement(String SQL, int RSType, int RSConcurrency);

  • prepareCall(String sql, int RSType, int RSConcurrency);

第一個(gè)參數(shù)表示 ResultSet 對(duì)象的類型,第二個(gè)參數(shù)是兩個(gè) ResultSet 常量之一,用于指定結(jié)果集是只讀的還是可更新的。

結(jié)果集的類型

可能的RSType如下所示。如果您不指定任何ResultSet類型,您將自動(dòng)獲得TYPE_FORWARD_ONLY類型的結(jié)果集。

類型描述
ResultSet.TYPE_FORWARD_ONLY

光標(biāo)只能在結(jié)果集中向前移動(dòng)。

ResultSet.TYPE_SCROLL_INSENSITIVE

游標(biāo)可以向前和向后滾動(dòng),并且結(jié)果集對(duì)其他人在創(chuàng)建結(jié)果集之后對(duì)數(shù)據(jù)庫(kù)所做的更改不敏感。

ResultSet.TYPE_SCROLL_SENSITIVE.

游標(biāo)可以向前和向后滾動(dòng),并且結(jié)果集對(duì)其他人在創(chuàng)建結(jié)果集之后對(duì)數(shù)據(jù)庫(kù)所做的更改非常敏感。

ResultSet的并發(fā)

可能的RSConcurrency在下面給出。如果您未指定任何并發(fā)類型,則將自動(dòng)獲得 CONCUR_READ_ONLY 類型。

并發(fā)描述
ResultSet.CONCUR_READ_ONLY

創(chuàng)建只讀結(jié)果集。這是默認(rèn)值

ResultSet.CONCUR_UPDATABLE

創(chuàng)建可更新的結(jié)果集。

到目前為止,我們編寫的所有示例都可以編寫如下,該示例初始化一個(gè)Statement對(duì)象以創(chuàng)建只讀的ResultSet對(duì)象-

try {
   Statement stmt = conn.createStatement(
                           ResultSet.TYPE_FORWARD_ONLY,
                           ResultSet.CONCUR_READ_ONLY);
}
catch(Exception ex) {
   ....
}
finally {
   ....
}

導(dǎo)航結(jié)果集

ResultSet接口中有幾種涉及移動(dòng)光標(biāo)的方法,包括-

序號(hào)方法與說(shuō)明
1public void beforeFirst() throws SQLException

將光標(biāo)移到第一行之前。

2public void afterLast() throws SQLException

將光標(biāo)移到最后一行之后。

3public boolean first() throws SQLException

將光標(biāo)移到第一行。

4public void last() throws SQLException

將光標(biāo)移到最后一行。

5public boolean absolute(int row) throws SQLException

將光標(biāo)移動(dòng)到指定行。

6public boolean relative(int row) throws SQLException

將光標(biāo)向前或向后移動(dòng)給定的行數(shù),從它當(dāng)前所指向的位置移動(dòng)。

7public boolean previous() throws SQLException

將光標(biāo)移動(dòng)到前一行。如果前一行不在結(jié)果集中,則此方法返回false。

8public boolean next() throws SQLException

將光標(biāo)移動(dòng)到下一行。如果結(jié)果集中沒(méi)有更多的行,則此方法返回 false。

9public int getRow() throws SQLException

返回光標(biāo)所指向的行號(hào)。

10public void moveToInsertRow() throws SQLException

將光標(biāo)移動(dòng)到結(jié)果集中的特殊行,該行可用于將新行插入到數(shù)據(jù)庫(kù)中。記住當(dāng)前光標(biāo)的位置。

11public void moveToCurrentRow() throws SQLException

如果光標(biāo)當(dāng)前位于插入行,則將光標(biāo)移回當(dāng)前行; 否則,此方法不執(zhí)行任何操作

為了更好地理解,讓我們研究“導(dǎo)航-示例代碼”。

查看結(jié)果集

ResultSet接口包含許多用于獲取當(dāng)前行數(shù)據(jù)的方法。

每個(gè)可能的數(shù)據(jù)類型都有一個(gè)get方法,每個(gè)get方法都有兩個(gè)版本-

  • 帶有列名的列。

  • 帶有列索引的索引。

例如,如果您感興趣的查看列包含一個(gè) int,那么您需要使用 ResultSet 的 getInt ()方法之一

序號(hào)方法與說(shuō)明
1public int getInt(String columnName) throws SQLException

返回名為columnName的列中當(dāng)前行的 int。

2public int getInt(int columnIndex) throws SQLException

返回指定列索引中當(dāng)前行中的整型數(shù)。列索引從1開(kāi)始,這意味著行的第一列是1,行的第二列是2,依此類推。

同樣,在ResultSet接口中,對(duì)于八種Java基本類型中的每一種,以及常見(jiàn)類型(如java.lang.String,java.lang.Object和java.net.URL),都有g(shù)et方法。

還有一些獲取SQL數(shù)據(jù)類型java.sql.Date,java.sql.Time,java.sql.TimeStamp,java.sql.Clob和java.sql.Blob的方法。查看文檔以獲取有關(guān)使用這些SQL數(shù)據(jù)類型的更多信息。

為了更好地理解,讓我們研究查看-Example Code。

更新結(jié)果集

ResultSet接口包含用于更新結(jié)果集數(shù)據(jù)的更新方法的集合。

與get方法一樣,每種數(shù)據(jù)類型都有兩種更新方法-

  • 帶有列名的列。

  • 帶有列索引的索引。

例如,要更新結(jié)果集當(dāng)前行的String列,可以使用以下updateString()方法之一-

序號(hào)方法與說(shuō)明
1public void updateString(int columnIndex, String s) throws SQLException

將指定列中的 String 更改為 s 的值。

2public void updateString(String columnName, String s) throws SQLException

與前面的方法類似,只是列是通過(guò)其名稱而不是索引指定的。

java.sql包中有八種原始數(shù)據(jù)類型以及String,Object,URL和SQL數(shù)據(jù)類型的更新方法。

更新結(jié)果集中的一行會(huì)更改ResultSet對(duì)象中當(dāng)前行的列,但不會(huì)更改基礎(chǔ)數(shù)據(jù)庫(kù)中的行。要更新對(duì)數(shù)據(jù)庫(kù)中行的更改,您需要調(diào)用以下方法之一。

序號(hào)方法與說(shuō)明
1public void updateRow()

通過(guò)更新數(shù)據(jù)庫(kù)中相應(yīng)的行來(lái)更新當(dāng)前行。

2public void deleteRow()

從數(shù)據(jù)庫(kù)中刪除當(dāng)前行

3public void refreshRow()

刷新結(jié)果集中的數(shù)據(jù),以反映數(shù)據(jù)庫(kù)中最近的任何更改。

4public void cancelRowUpdates()

取消對(duì)當(dāng)前行所做的任何更新。

5public void insertRow()

在數(shù)據(jù)庫(kù)中插入一行。只有當(dāng)光標(biāo)指向插入行時(shí),才能調(diào)用此方法。

為了更好地理解,讓我們研究“更新示例代碼”。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清