创建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);
        }

    }

}


 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值