創建Statement對象時控制結果集類型;

package com.test;
import java.sql.*;

/**
* 此例說明的問題:創建Statement對象時控制結果集類型;
@author     chb
*/


class Hello
{
    
public static void main(String args[])
    
{
        
try
        
{
            
/**
            * 第一步:加載JDBC驅動;
            
*/

            Class.forName(
"sun.jdbc.odbc.JdbcOdbcDriver");
            
            
/**
            * 第二步:建立連接;
            
*/
            
            String url
="jdbc:odbc:bookdsn";         
            Connection con
=DriverManager.getConnection(url,"sa","");
            
            
/**
            * 第三步:創建Statement,執行查詢並得到結果集;
            * 在此步,可以控制結果集類型、結果集併發類型、可保持結果集;
            * createStatement(結果集類型,結果集併發類型,可保持結果集);
            *
            * 結果集類型:
            * ResultSet.TYPE_FORWARD_ONLY ---只能調用next()向下移動,爲默認值,結果集爲靜態;
            * ResultSet.TYPE_SCROLL_INSENSITIVE -- 可自由移動,結果集爲靜態;
            * ResultSet.TYPE_SCROLL_SENSITIVE -- 可自由移動,結果集爲動態遊標;
            * 
            * 結果集併發類型:
            * ResultSet.CONCUR_READ_ONLY -- 默認,結果集只讀; 
            * ResultSet.CONCUR_UPDATABLE -- 結果集可更新;
            * 
            * 可保持結果集:
            * 通常情況下,提交事務時,操作會關閉當前事務創建的ResultSet對象或者光標;
            * ResultSet.HOLD_CURSORS_OVER_COMMIT -- 事務結束後結果集依然保持打開狀態;
            * ResultSet.CLOSE_CURSORS_AT_COMMIT -- 事務提交後結果集會被關閉;
            * 注:該特性從JDBC3.0開始支持,且有些數據庫不支持此操作;
            *
            * 如果execute返回多個記錄集,getMoreResultSets方法可使用3個參數:
            * Statement.CLOSE_CURRENT_RESULT -- 調用新結果集時關閉當前結果集;
            * Statement.KEEP_CURRENT_RESULT -- 調用新結果集時不關閉當前結果集;
            * Statement.CLOSE_ALL_RESULTS -- 調用新結果集時關閉原有所有結果集;
            * 注:該特性從JDBC3.0開始支持;
            
*/

            Statement stmt
=con.createStatement(
                    ResultSet.TYPE_FORWARD_ONLY,
                    ResultSet.CONCUR_READ_ONLY);
                    
//ResultSet.HOLD_CURSORS_OVER_COMMIT);
                    
            ResultSet rs
=stmt.executeQuery("SELECT ID,book_name,book_price,book_quantity from book_stock");
            
            
/**
            * 第四步:處理結果集;
            
*/
                
            System.out.println(
"編號 圖書名稱 圖書單價 圖書數量 ");
            
while(rs.next())
            
{
                    
int id=rs.getInt("ID");
                    String book_name
=rs.getString("book_name");
                    
double book_price=rs.getDouble("book_price");
                    
int book_quantity=rs.getInt("book_quantity");
                    System.out.println(id
+" "+book_name+" "+book_price+" "+book_quantity);
            }

            
            
/**
            * 創建可自由移動結果集;
            * afterLast()  -- 移動到最後一條之後;
            * last()       -- 移動到最後一行可使用 
            * previous()   -- 向上移動一行
            * next()       -- 向下移動一行 
            * beforeFirst()-- 移動到第一行之前
            
*/

            stmt.close();
            stmt
=con.createStatement(
                    ResultSet.TYPE_SCROLL_INSENSITIVE,
                    ResultSet.CONCUR_READ_ONLY);
            rs
=stmt.executeQuery("SELECT ID,book_name,book_price,book_quantity from book_stock");
            rs.afterLast();
//
            System.out.println("isAfterLast:" + rs.isAfterLast() );
            rs.beforeFirst();
            System.out.println(
"isBeforeFirst:" + rs.isBeforeFirst() );
            rs.last();
            System.out.println(
"isLast:" + rs.isLast() );
            rs.previous();
            System.out.println(
"isLast:" + rs.isLast() );
            
            
/**
            * 第五步:關閉連接、結果集;
            
*/
                
            rs.close();
            stmt.close();
            con.close();
        }

         
catch(Exception e)
        
{
            System.out.println(
"發生異常:"+e);
        }

    }

}


 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章