雅典之夏的小站
          知人者智 自知者明 Fighting!!
          一、通過(guò)ResultSet對(duì)象對(duì)結(jié)果集進(jìn)行處理



          從前面的學(xué)習(xí)中,我們掌握了通過(guò)Statement類及其子類傳遞SQL語(yǔ)句,對(duì)數(shù)據(jù)庫(kù)管理系統(tǒng)進(jìn)行訪問(wèn)。一般來(lái)說(shuō),對(duì)數(shù)據(jù)庫(kù)的操作大部分都是執(zhí)行查詢語(yǔ)句。這種語(yǔ)句執(zhí)行的結(jié)果是返回一個(gè)ResultSet類的對(duì)象。要想把查詢的結(jié)果返回給用戶,必須對(duì)ResultSet對(duì)象進(jìn)行相關(guān)處理。今天,我們就來(lái)學(xué)習(xí)對(duì)結(jié)果集的處理方法。

          按照慣例,讓我們先來(lái)看一個(gè)例子:



          package com.rongji.demo;



          import java.sql.*;



          public class dataDemo {

          public dataDemo() {

          }



          public static void main(String[] args) {



          try {

          Class.forName("oracle.jdbc.driver.OracleDriver");

          //建立連接

          //第二步是用適當(dāng)?shù)尿?qū)動(dòng)程序連接到DBMS,看下面的代碼[自行修改您所連接的數(shù)據(jù)庫(kù)相關(guān)信息]:

          String url = "jdbc:oracle:thin:@192.168.4.45:1521:oemrep";

          String username = "ums";

          String password = "rongji";

          //用url創(chuàng)建連接

          Connection con = DriverManager.getConnection(url, username, password);

          Statement sta = con.createStatement();

          String sql = "select * from rbac_application ";

          ResultSet resultSet = sta.executeQuery(sql);

          while (resultSet.next()) {

          int int_value = resultSet.getInt(1);

          String string_value = resultSet.getString(2);

          String a = resultSet.getString(3);

          String b = resultSet.getString(4);

          //從數(shù)據(jù)庫(kù)中以兩種不同的方式取得數(shù)據(jù)。

          System.out.println(int_value + " " + string_value + " " + a + " " +

          b);

          //將檢索結(jié)果在用戶瀏覽器上輸出。

          }

          //獲取結(jié)果集信息

          ResultSetMetaData resultSetMD = resultSet.getMetaData();

          System.out.println("ColumnCount:" + resultSetMD.getColumnCount());

          for (int i = 1; i < resultSetMD.getColumnCount(); i++) {

          System.out.println("ColumnName:" + resultSetMD.getColumnName(i) + " " +

          "ColumnTypeName:" +

          resultSetMD.getColumnTypeName(i));

          System.out.println("isReadOnly:" + resultSetMD.isReadOnly(i)

          + " isWriteable:" + resultSetMD.isWritable(i)

          + " isNullable:" + resultSetMD.isNullable(i));

          System.out.println("tableName:" + resultSetMD.getTableName(i));

          }



          //關(guān)閉

          con.close();

          }

          catch (Exception ex) {

          ex.printStackTrace();

          }

          }

          }



          1、ResultSet類的基本處理方法



          一個(gè)ResultSet對(duì)象對(duì)應(yīng)著一個(gè)由查詢語(yǔ)句返回的一個(gè)表,這個(gè)表中包含所有的查詢結(jié)果,實(shí)際上,我們就可以將一個(gè)ResultSet對(duì)象看成一個(gè)表。對(duì)ResultSet對(duì)象的處理必須逐行進(jìn)行,而對(duì)每一行中的各個(gè)列,可以按任何順序進(jìn)行處理。

          ResultSet對(duì)象維持一個(gè)指向當(dāng)前行的指針。最初,這個(gè)指針指向第一行之前。Result類的next()方法使這個(gè)指針向下移動(dòng)一行。因此,第一次使用next()方法將指針指向結(jié)果集的第一行,這時(shí)可以對(duì)第一行的數(shù)據(jù)進(jìn)行處理。處理完畢后,使用next()方法,將指針移向下一行,繼續(xù)處理第二行數(shù)據(jù)。next()方法的返回值是一個(gè)boolean型的值,該值若為true, 說(shuō)明結(jié)果集中還存在下一條記錄,并且指針已經(jīng)成功指向該記錄,可以對(duì)其進(jìn)行處理;若返回值是false,則說(shuō)明沒(méi)有下一行記錄,結(jié)果集已經(jīng)處理完畢。

          在對(duì)每一行進(jìn)行處理時(shí),可以對(duì)各個(gè)列按任意順序進(jìn)行處理。不過(guò),按從左到右的順序?qū)Ω髁羞M(jìn)行處理可以獲得較高的執(zhí)行效率.ResultSet類的getXXX()方法可以從某一列中獲得檢索結(jié)果。其中XXX是JDBC中的Java數(shù)據(jù)類型,如int, String ,Date等,這與PreparedStatement類和CallableStatement類設(shè)置SQL語(yǔ)句參數(shù)值相類似。 Sun公司提供的getXXX() API提供兩種方法來(lái)指定列名進(jìn)行檢索:一種是以一個(gè)int值作為列的索引,另一種是以一個(gè)String對(duì)象作為列名來(lái)索引。大家可以參照一下上面的例子。



          2、獲取結(jié)果集的信息



          在對(duì)數(shù)據(jù)庫(kù)的表結(jié)構(gòu)已經(jīng)了解的前提下,可以知道返回的結(jié)果集中各個(gè)列的一些情況,如:列名數(shù)據(jù)類型等等。有時(shí)并不知道結(jié)果集中各個(gè)列的情況,這時(shí)可以使用Resultset類的getMetaData方法來(lái)獲取結(jié)果集的信息。如上面的例子:

          ResultSetMetaData resultSetMD = resultSet.getMetaData();

          GetMetaData()方法返回一個(gè)ResultSetMetaData類的對(duì)象,使用該類的方法,得到許多關(guān)于結(jié)果集的信息,下面給出幾個(gè)常用的方法:

          (1) getColumnCount()返回一個(gè)int值,指出結(jié)果集中的列數(shù)。

          (2) getTableName(int column)返回一個(gè)字符串,指出參數(shù)中所代表列的表的名稱。

          (3) getColumnLabel(int column)返回一個(gè)String對(duì)象,該對(duì)象是column所指的列的顯示標(biāo)題。

          (4) getColumnName(int column)返回的是該列在數(shù)據(jù)庫(kù)中的名稱。可以把此方法返回的String對(duì)象作為Resultset類的getXXX()方法的參數(shù)。不過(guò),并沒(méi)有太大的實(shí)際意義。

          (5) getColumnType(int comlumn)返回指定列的SQL數(shù)據(jù)類型。他的返回值是一個(gè)int值。在java.sql.Types類中有關(guān)于各種SQL數(shù)據(jù)類型的定義。

          (6) getColumnTypeName(int comlumn)返回指定列的數(shù)據(jù)類型在數(shù)據(jù)源中的名稱。他的返回值是一個(gè)String對(duì)象。

          (7) isReadOnly(int column) 返回一個(gè)boolean值,指出該列是否是只讀的。

          (8) isWriteable(int column) 返回一個(gè)boolean值,指出該列是否可寫。

          (9) isNullable(int column)返回一個(gè)boolean值,指出該列是否允許存入一個(gè)NULL 值。
          posted on 2005-10-27 12:53 rkind 閱讀(167) 評(píng)論(0)  編輯  收藏 所屬分類: JAVA基礎(chǔ)&數(shù)據(jù)庫(kù)
          主站蜘蛛池模板: 泽库县| 呼伦贝尔市| 吉安市| 宝坻区| 唐山市| 恭城| 永寿县| 民丰县| 佛教| 永吉县| 竹溪县| 轮台县| 沧州市| 韶关市| 揭阳市| 佛山市| 泰安市| 祁东县| 磐安县| 方城县| 会同县| 郧西县| 依安县| 娄底市| 冀州市| 商南县| 五大连池市| 临夏市| 永丰县| 乌鲁木齐县| 亳州市| 德清县| 九龙坡区| 多伦县| 宾阳县| 永和县| 会宁县| 华容县| 富平县| 岳普湖县| 昆明市|