雅典之夏的小站
          知人者智 自知者明 Fighting!!
          一、通過ResultSet對象對結果集進行處理



          從前面的學習中,我們掌握了通過Statement類及其子類傳遞SQL語句,對數據庫管理系統進行訪問。一般來說,對數據庫的操作大部分都是執行查詢語句。這種語句執行的結果是返回一個ResultSet類的對象。要想把查詢的結果返回給用戶,必須對ResultSet對象進行相關處理。今天,我們就來學習對結果集的處理方法。

          按照慣例,讓我們先來看一個例子:



          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");

          //建立連接

          //第二步是用適當的驅動程序連接到DBMS,看下面的代碼[自行修改您所連接的數據庫相關信息]:

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

          String username = "ums";

          String password = "rongji";

          //用url創建連接

          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);

          //從數據庫中以兩種不同的方式取得數據。

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

          b);

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

          }

          //獲取結果集信息

          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));

          }



          //關閉

          con.close();

          }

          catch (Exception ex) {

          ex.printStackTrace();

          }

          }

          }



          1、ResultSet類的基本處理方法



          一個ResultSet對象對應著一個由查詢語句返回的一個表,這個表中包含所有的查詢結果,實際上,我們就可以將一個ResultSet對象看成一個表。對ResultSet對象的處理必須逐行進行,而對每一行中的各個列,可以按任何順序進行處理。

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

          在對每一行進行處理時,可以對各個列按任意順序進行處理。不過,按從左到右的順序對各列進行處理可以獲得較高的執行效率.ResultSet類的getXXX()方法可以從某一列中獲得檢索結果。其中XXX是JDBC中的Java數據類型,如int, String ,Date等,這與PreparedStatement類和CallableStatement類設置SQL語句參數值相類似。 Sun公司提供的getXXX() API提供兩種方法來指定列名進行檢索:一種是以一個int值作為列的索引,另一種是以一個String對象作為列名來索引。大家可以參照一下上面的例子。



          2、獲取結果集的信息



          在對數據庫的表結構已經了解的前提下,可以知道返回的結果集中各個列的一些情況,如:列名數據類型等等。有時并不知道結果集中各個列的情況,這時可以使用Resultset類的getMetaData方法來獲取結果集的信息。如上面的例子:

          ResultSetMetaData resultSetMD = resultSet.getMetaData();

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

          (1) getColumnCount()返回一個int值,指出結果集中的列數。

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

          (3) getColumnLabel(int column)返回一個String對象,該對象是column所指的列的顯示標題。

          (4) getColumnName(int column)返回的是該列在數據庫中的名稱。可以把此方法返回的String對象作為Resultset類的getXXX()方法的參數。不過,并沒有太大的實際意義。

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

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

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

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

          (9) isNullable(int column)返回一個boolean值,指出該列是否允許存入一個NULL 值。
          posted on 2005-10-27 12:53 rkind 閱讀(167) 評論(0)  編輯  收藏 所屬分類: JAVA基礎&數據庫
          主站蜘蛛池模板: 西乌珠穆沁旗| 嘉鱼县| 清流县| 宁乡县| 洞头县| 凯里市| 鄂托克前旗| 漠河县| 丹凤县| 铜陵市| 长寿区| 张家界市| 深州市| 神木县| 玉溪市| 当阳市| 冷水江市| 株洲市| 栾川县| 宁津县| 云浮市| 浙江省| 澳门| 光泽县| 长宁县| 烟台市| 永泰县| 根河市| 南木林县| 衢州市| 讷河市| 宁城县| 洪雅县| 酉阳| 怀来县| 莱西市| 饶平县| 岳池县| 罗江县| 临清市| 吉安市|