日期:2014-05-20  浏览次数:20838 次

PreparedStatement 如何设置为可滚动的结果集合
pstmt   =   baseDb.getConnection().prepareStatement(lsql.toString(),Statement.RETURN_GENERATED_KEYS);//

ResultSet   rs   =   pstmt.executeQuery();
这样的结果集合是不可移动指针的,请问如何改
               


------解决方案--------------------
PreparedStatement prepareStatement(String sql,
int resultSetType,
int resultSetConcurrency,
int resultSetHoldability)
throws SQLException创建一个 PreparedStatement 对象,该对象将生成具有给定类型、并发性和可保存性的 ResultSet 对象。
此方法与上述 prepareStatement 方法相同,但它允许重写默认结果集类型、并发性和可保存性。


参数:
sql - 一个 String 对象,它是将被发送到数据库的 SQL 语句,可以包含一个或多个 ? IN 参数
resultSetType - 以下 ResultSet 常量之一:ResultSet.TYPE_FORWARD_ONLY、ResultSet.TYPE_SCROLL_INSENSITIVE 或 ResultSet.TYPE_SCROLL_SENSITIVE
resultSetConcurrency - 以下 ResultSet 常量之一:ResultSet.CONCUR_READ_ONLY 或 ResultSet.CONCUR_UPDATABLE
resultSetHoldability - 以下 ResultSet 常量之一:ResultSet.HOLD_CURSORS_OVER_COMMIT 或 ResultSet.CLOSE_CURSORS_AT_COMMIT
返回:
一个包含预编译的 SQL 语句的新 PreparedStatement 对象,该对象将生成具有给定类型、并发性和可保存性的 ResultSet 对象
抛出:
SQLException - 如果发生数据库访问错误,或者给定参数不是指示类型、并发性和可保存性的 ResultSet 常量


例子:
connection.prepareStatement( "select * from test ",ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE,ResultSet.HOLD_CURSORS_OVER_COMMIT);

------解决方案--------------------
PreparedStatement 生成的语法不对。

pstmt = baseDb.getConnection().prepareStatement(lsql.toString(),TYPE_SCROLL_SENSITIVE ,ResultSet.CONCUR_READ_ONLY);//这句。

ResultSet rs = pstmt.executeQuery();