天天看點

JDBC Connection接口實作ResultSet的方法

JDBC Connection接口實作ResultSet的方法

作者:佚名出處:IT專家網論壇2009-07-10 13:00本文向您介紹使用JDBC Connection接口實作結果集的幾種方法,包括最基本的ResultSet、可滾動的ResultSet類型以及可更新的ResultSet等。

  結果集(ResultSet)是資料中查詢結果傳回的一種對象,可以說結果集是一個存儲查詢結果的對象,但是結果集并不僅僅具有存儲的功能,他同時還具有操縱資料的功能,通過JDBC Connection接口可能完成對資料的更新等。

  結果集讀取資料的方法主要是getXXX(),他的參數可以使整型表示第幾列(是從1開始的),還可以是列名。傳回的是對應的XXX類型的值。如果對應那列時空值,XXX是對象的話傳回XXX型的空值,如果XXX是數字類型,如Float等則傳回0,boolean傳回false。使用getString()可以傳回所有的列的值,不過傳回的都是字元串類型的。XXX可以代表的類型有:基本的資料類型如整型(int),布爾型(Boolean),浮點型(Float,Double)等,比特型(byte),還包括一些特殊的類型,如:日期類型(java.sql.Date),時間類型(java.sql.Time),時間戳類型(java.sql.Timestamp),大數型(BigDecimal和BigInteger等)等。還可以使用getArray(int colindex/String columnname),通過這個方法獲得目前行中,colindex所在列的元素組成的對象的數組。使用getAsciiStream(

  int colindex/String colname)可以獲得該列對應的目前行的ascii流。也就是說所有的getXXX方法都是對目前行進行操作。

  結果集從其使用的特點上可以分為四類,這四類的結果集的所具備的特點都是和Statement語句的建立有關,因為結果集是通過Statement語句執行後産生的,是以可以說,結果集具備何種特點,完全決定于Statement,當然我是說下面要将的四個特點,在Statement建立時包括三種類型。首先是無參數類型的,他對應的就是下面要介紹的基本的ResultSet對應的Statement。下面的代碼中用到的Connection并沒有對其初始化,變量conn代表的就是Connection對應的對象。SqlStr代表的是響應的SQL語句。

  1、最基本的ResultSet。

  之是以說是最基本的ResultSet是因為,這個ResultSet他起到的作用就是完成了查詢結果的存儲功能,而且隻能讀去一次,不能夠來回的滾動讀取。這種結果集的建立方式如下:

  Statement st = conn.CreateStatement

  ResultSet rs = Statement.excuteQuery(sqlStr);

  由于這種結果集不支援滾動的讀取功能,是以如果獲得這樣一個結果集,隻能使用它裡面的next()方法,逐個的讀去資料。

  2、可滾動的ResultSet類型。

  這個類型支援前後滾動取得紀錄next()、previous(),回到第一行first(),同時還支援要去的ResultSet中的第幾行absolute(int n),以及移動到相對目前行的第幾行relative(int n),要實作這樣的ResultSet在建立Statement時用如下的方法。

  Statement st = conn.createStatement(int resultSetType, int resultSetConcurrency)

  ResultSet rs = st.executeQuery(sqlStr)

  其中兩個參數的意義是:

  resultSetType是設定ResultSet對象的類型可滾動,或者是不可滾動。取值如下:

  ResultSet.TYPE_FORWARD_ONLY隻能向前滾動

  ResultSet.TYPE_SCROLL_INSENSITIVE和Result.TYPE_SCROLL_SENSITIVE這兩個方法都能夠實作任意的前後滾動,使用各種移動的ResultSet指針的方法。二者的差別在于前者對于修改不敏感,而後者對于修改敏感。

  resultSetConcurency是設定ResultSet對象能夠修改的,取值如下:

  ◆ResultSet.CONCUR_READ_ONLY 設定為隻讀類型的參數。

  ◆ResultSet.CONCUR_UPDATABLE 設定為可修改類型的參數。

  是以如果隻是想要可以滾動的類型的Result隻要把Statement如下指派就行了。

  Statement st = conn.createStatement(Result.TYPE_SCROLL_INSENITIVE,

  ResultSet.CONCUR_READ_ONLY);

  ResultSet rs = st.excuteQuery(sqlStr);

  用這個Statement執行的查詢語句得到的就是可滾動的ResultSet。

  3、可更新的ResultSet

  這樣的ResultSet對象可以完成對資料庫中表的修改,但是我知道ResultSet隻是相當于資料庫中表的視圖,是以并不時所有的ResultSet隻要設定了可更新就能夠完成更新的,能夠完成更新的ResultSet的SQL語句必須要具備如下的屬性:

  a、隻引用了單個表。

  b、不含有join或者group by子句。

  c、那些列中要包含主關鍵字。

  具有上述條件的,可更新的ResultSet可以完成對資料的修改,可更新的結果集的建立方法是:

  Statement st = createstatement(Result.TYPE_SCROLL_INSENSITIVE,Result.CONCUR_UPDATABLE)

  4、可保持的ResultSet

  正常情況下如果使用Statement執行完一個查詢,又去執行另一個查詢時這時候第一個查詢的結果集就會被關閉,也就是說,所有的Statement的查詢對應的結果集是一個,如果調用Connection的commit()方法也會關閉結果集。可保持性就是指當ResultSet的結果被送出時,是被關閉還是不被關閉。JDBC2.0和1.0提供的都是送出後ResultSet就會被關閉。不過在JDBC3.0中,我們可以通過設定JDBC Connection接口中的ResultSet是否關閉。要完成這樣的ResultSet的對象的建立,要使用的Statement的建立要具有三個參數,這個Statement的建立方式也就是,我所說的Statement的第三種建立方式。如下:

  Statement st=createStatement(int resultsetscrollable,int resultsetupdateable,int resultsetSetHoldability)

  ResultSet rs = st.excuteQuery(sqlStr);

  JDBC Connection接口中,前兩個參數和兩個參數的createStatement方法中的參數是完全相同的,這裡隻介紹第三個參數:

  ◆ResultSetHoldability表示在結果集送出後結果集是否打開,取值有兩個:

  ◆ResultSet.HOLD_CURSORS_OVER_COMMIT:表示修改送出時,不關閉資料庫。

  ◆ResultSet.CLOSE_CURSORS_AT_COMMIT:表示修改送出時ResultSet關閉。