JDBC ResultSet 結(jié)果集

jdbc resultset 結(jié)果集

jdbc 執(zhí)行 select 語句查詢后,返回的數(shù)據(jù)放在結(jié)果集中,其中 java.sql.resultset 接口表示數(shù)據(jù)庫查詢的結(jié)果集。

resultset 對象維護(hù)指向結(jié)果集中當(dāng)前行的游標(biāo)。 結(jié)果集是指包含在 resultset 對象中的行和列數(shù)據(jù)。

resultset 接口的方法可以分為三類:

  • 瀏覽方法:用于移動光標(biāo)。
  • 獲取方法:用于查看光標(biāo)指向的當(dāng)前行的列中的數(shù)據(jù)。
  • 更新方法:用于更新當(dāng)前行的列中的數(shù)據(jù)。 然后在基礎(chǔ)數(shù)據(jù)庫中更新數(shù)據(jù)。

光標(biāo)可以基于 resultset 的屬性移動,當(dāng)創(chuàng)建生成 resultset 的相應(yīng) statement 時,將指定這些屬性。

jdbc 提供以下方法創(chuàng)建 resultset:

  • createstatement(int rstype, int rsconcurrency);
  • preparestatement(string sql, int rstype, int rsconcurrency);
  • preparecall(string sql, int rstype, int rsconcurrency);

其中,方法中參數(shù):

  • 參數(shù) rstype 用于指定 resultset 對象的類型;
  • 參數(shù) rsconcurrency 用于指定結(jié)果集是只讀還是可更新。

 

1. resultset 類型取值

類型 描述
resultset.type_forward_only 光標(biāo)只能在結(jié)果集中向前移動。
resultset.type_scroll_insensitive 光標(biāo)可以向前和向后滾動,結(jié)果集對創(chuàng)建結(jié)果集后發(fā)生的數(shù)據(jù)庫所做的更改不敏感。
resultset.type_scroll_sensitive 光標(biāo)可以向前和向后滾動,結(jié)果集對創(chuàng)建結(jié)果集之后發(fā)生的其他數(shù)據(jù)庫的更改敏感。

如果不指定任何resultset類型,將自動分配一個type_forward_only值。

 

2. resultset 并發(fā)性取值

并發(fā) 描述
resultset.concur_read_only 創(chuàng)建只讀結(jié)果集,這是默認(rèn)值。
resultset.concur_updatable 創(chuàng)建可更新的結(jié)果集

如果不指定任何并發(fā)類型,將自動獲得一個concur_read_only值。

 

3. 創(chuàng)建 statement 范例

初始化一個 statement 對象來創(chuàng)建一個向前只讀的 resultset 對象:

try {
   statement stmt = conn.createstatement(
                           resultset.type_forward_only,
                           resultset.concur_read_only);
}
catch(exception ex) {
   ....
}
finally {
   ....
}

 

4. resultset 移動光標(biāo)的方法

編號 方法 描述
1 public void beforefirst() throws sqlexception 將光標(biāo)移動到第一行之前
2 public void afterlast() throws sqlexception 將光標(biāo)移動到最后一行之后。
3 public boolean first() throws sqlexception 將光標(biāo)移動到第一行。
4 public void last() throws sqlexception 將光標(biāo)移動到最后一行。
5 public boolean absolute(int row) throws sqlexception 將光標(biāo)移動到指定的行。
6 public boolean relative(int row) throws sqlexception 從當(dāng)前指向的位置,將光標(biāo)向前或向后移動給定行數(shù)。
7 public boolean previous() throws sqlexception 將光標(biāo)移動到上一行。 如果上一行關(guān)閉結(jié)果集,此方法返回false。
8 public boolean next() throws sqlexception 將光標(biāo)移動到下一行。 如果結(jié)果集中沒有更多行,則此方法返回false。
9 public int getrow() throws sqlexception 返回光標(biāo)指向的行號。
10 public void movetoinsertrow() throws sqlexception 將光標(biāo)移動到結(jié)果集中的特殊行,該行可用于將新行插入數(shù)據(jù)庫。當(dāng)前光標(biāo)位置被記住。
11 public void movetocurrentrow() throws sqlexception 如果光標(biāo)當(dāng)前位于插入行,則將光標(biāo)移回當(dāng)前行; 否則,此方法什么也不做

 

5. resultset 讀取結(jié)果集的方法

resultset 接口包含數(shù)十種獲取當(dāng)前行數(shù)據(jù)的方法。

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

  • 一個是采用列名稱。
  • 另一個采用列索引。
序號 方法 描述
1 public int getint(string columnname) throws sqlexception 返回名為columnname的列中當(dāng)前行中的int值。
2 public int getint(int columnindex) throws sqlexception 返回指定列索引當(dāng)前行中的int值。列索引從1開始,意味著行的第一列為1,行的第二列為2,依此類推。

類似地,在八個 java 基元類型中的每一個的 resultset 接口中都有 get 方法,以及常見的類型,如 java.lang.string,java.lang.object 和 java.net.url 等。

還有一些方法可以獲取 sql 數(shù)據(jù)類型 java.sql.date,java.sql.time,java.sql.timestamp,java.sql.clob 和 java.sql.blob。

 

6. resultset 更新結(jié)果集的方法

resultset 接口包含用于更新結(jié)果集的方法。

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

  • 一個是采用列名稱。
  • 另一個采用列索引。
序號 方法 描述
1 public void updatestring(int columnindex, string s) throws sqlexception 將指定列中的string值更改為指定的s值。
2 public void updatestring(string columnname, string s) throws sqlexception 與前前的方法類似,除了使用列的名稱而不是列的索引指定。

有八種基本數(shù)據(jù)類型的更新方法,以及java.sql包中的string,object,url和sql數(shù)據(jù)類型。

更新結(jié)果集中的一行會更改resultset對象中當(dāng)前行的列,但不會更改底層數(shù)據(jù)庫中的列的值。 要更新數(shù)據(jù)庫中的行,需要調(diào)用以下方法之一。

序號 方法 描述
1 public void updaterow() 更新數(shù)據(jù)庫中當(dāng)前行
2 public void deleterow() 從數(shù)據(jù)庫中刪除當(dāng)前行
3 public void refreshrow() 刷新結(jié)果集中的數(shù)據(jù)以反映數(shù)據(jù)庫中最近的任何更改。
4 public void cancelrowupdates() 取消對當(dāng)前行所做的任何更新。
5 public void insertrow() 在數(shù)據(jù)庫中插入一行。 只有當(dāng)光標(biāo)指向插入行時,才能調(diào)用此方法。
相關(guān)文章
亚洲国产精品第一区二区,久久免费视频77,99V久久综合狠狠综合久久,国产免费久久九九免费视频