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); } } } 上面是 创建Statement对象以及控制结果集类型的具体例子。