Java學習 JDBC結果集

2021-09-13 22:33:49 字數 4099 閱讀 3077

首先結果集是resultset它是乙個介面。

所謂的結果集resultset,它代表的就是資料表(a table of data)。它通常通過執行乙個statement物件的查詢資料庫來得到的。

乙個resultset物件維持著指向當前資料行的乙個游標,游標出事指向的第一行之前,使用next方法講游標移動到下一行,檔結果集物件中沒有更多的行,就返回false。當然可以使用while迴圈來遍歷整個結果集。

預設的resultset物件是不可更新的並且有乙個僅僅可以向前移動的游標。這說明,你僅僅能遍歷一次結果集--從第一行到最後一行。當然,可以使resultset變得可以滾動和或可更新。看下面的**:

statement stmt = con.createstatement(result.type_scroll_insensitive,resultset.concur_updatable);

resultset rs = stmt.executequery("select a,b from table2");

//rs是可滾動的、不會被其他人改變、可更新。

我們來更加詳細的說明一下:我們已經知道resultset是乙個藉口,我們以前都是通過statement執行查詢方法,來返回乙個resultset物件。其中我們只能通過設定statement物件,來設定返回的resultset物件。其中的貓膩就是在建立statement物件的方法中。其中connection提供一下方法來建立所需的resultset:

第一種:

createstatement(int rstype, int rsconcurrency);
第二種:

preparestatement(string sql, int rstype, int rsconcurrency);
第三種:

preparecall(string sql, int rstype, int rsconcurrency);
這樣來看都有有哪些rstype呢,有哪些rsconcurrency呢?

resultset型別

可能的rstype值如下。不指定的話預設分配type_forward_only

以下詳細解釋各個型別:

resultset.type_forward_only游標只能在結果集中向前移動。

resultset.type_scroll_insensitive游標可以向前和向後滾動,結果集對建立結果集後發生的資料庫所做的更改不敏感。

resultset.type_scroll_sensitive游標可以向前和向後滾動,結果集對建立結果集之後發生的其他資料庫的更改敏感。

resultset併發性

可能的rsconcurrency如下,不指定任何併發型別,將自動份分配concur_read_only

resultset.concur_read_only建立唯讀結果集,這是預設值。

resultset.concur_updatable建立可更新的結果集

進行資料操作,或者列資料更新,都需要移動游標。

下面的一些方法詳細說明:

1public void beforefirst() throws sqlexception將游標移動到第一行之前

2public void afterlast() throws sqlexception將游標移動到最後一行之後。

3public boolean first() throws sqlexception將游標移動到第一行。

4public void last() throws sqlexception將游標移動到最後一行。

5public boolean absolute(int row) throws sqlexception將游標移動到指定的行。

6public boolean relative(int row) throws sqlexception從當前指向的位置,將游標向前或向後移動給定行數。

7public boolean previous() throws sqlexception將游標移動到上一行。 如果上一行關閉結果集,此方法返回false。

8public boolean next() throws sqlexception將游標移動到下一行。 如果結果集中沒有更多行,則此方法返回false。

9public int getrow() throws sqlexception返回游標指向的行號。

10public void movetoinsertrow() throws sqlexception將游標移動到結果集中的特殊行,該行可用於將新行插入資料庫。當前游標位置被記住。

11public void movetocurrentrow() throws sqlexception如果游標當前位於插入行,則將游標移回當前行; 否則,此方法什麼也不做

結果集resultset介面提供了更多的getter方法,如:getint() getlong() getboolean(),通過這些方法,就可以從當前行中獲取列資料。列資料可以通過使用索引值,也可以通過使用列的名字。通常使用索引值會更加高效,注意是從1開始的。

為了最大程度的簡便,resultset每一行的列資料應該從左往右讀,並且只能讀一次。

通過列名字,來獲取列資料的getter方法,它的大小寫是不敏感的。當使用getter方法有列名相同的情況時,將返回第乙個匹配的列資料。使用列名是不明確的,所以最好還是用索引值。

除了getter方法,在jdbc2.0api中,又新增了updater方法。getter裡面的引數同樣適用於updater

與getter方法一樣,可以通過類名稱來更新 也可以通過列索引

updater方法可以通過以下兩種方法使用:

第一種update方法

在當前行更新列資料。在乙個可滾動的resultset 物件,游標可以像前移動也可以向後移動到乙個特定的位置。以下**演示了,更新第五行的name列資料:

rs.absolute(5);//將游標移動到第5行

rs.updatestring("name","ainsworth");//更新資料

rs.updaterow();//更新到元資料(源表)

第二種方法

向插入行中插入列資料,怎麼理解呢?乙個可更新的resultset物件有乙個特殊的行,這個行能夠作為工作行區域,用來建立被插入的行。以下**體現了向插入行中插入列資料。

rs.movetoinsertrow();//將游標移動到插入行。

rs.upsatestring(1,"ainsworth");//將第一列,更新資料

rs.updateint(2,35);//將第2列,更新資料

rs.updateboolean(3,true);//第三列

rs.insertrow();//將這三列資料插入到rs中,並且更新到元資料中。

rs.movetocurrentrow();

當statement物件關閉後,結果集能夠自動的關閉。

同時resultset物件中的列索引,型別和引數,可以通過resultset.getmetadata()方法返回。

inte***ce resultset

易百教程

ps:我越來越覺得官方文件的好處了,寫的很清楚明白。以後就專注官方文件了。

JDBC結果集的用法

1.可滾動的結果集 statement s conn.createstatement type,concurrency type 1.type forward only 結果集不能滾動 2.type scroll insensitive 結果集可以滾動,但對資料庫變化不敏感,也就是說即使資料庫資料被...

JDBC 對結果集的系列操作

jdbc 對結果集操作 一.讀取結果集的方式 a.從上往下進行讀取,也就是往前操作 class.forname com.mysql.jdbc.driver connection conn drivermanager.getconnection jdbc mysql localhost 3306 ho...

JDBC高階應用 處理結果集

處理結果集 查詢結果都保持在resultset結果集中,遍歷結果集便可以取得其中的資料。實際應用中,一般會查詢多個 查詢多個 可以使用同乙個statement或者preparedstatement實現,返回同乙個resultset物件 例如 string sql select from table1...