java.sql.SQLException: 对只转发结果集的无效操作: absolute beforeFirst
java.sql.SQLException: 对只转发结果集的无效操作: absolute,beforefirst
按缺省方法打开的ResultSet,其Cursor type 为forward only,也就是说只能向后执行next(),执行到最后一条记录就结束了。
有两个方法解决:
重新打开ResultSet,也就再一次执行executeQuery(),这时cursor又回到开头,可以再次执行next();
指定按可滚动的方式打开ResultSet:
Statement stmt = con.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery(...);
按上面的方式打开的ResultSet,Cursor type为scrollable,可以调用absolute()方法。
从你说明的情况看,如果不是真正需要随机访问,采用第一种方法更合适。因为可滚动光标库相对于仅向前光标库来说,其开销是很大的。
java
.
sql
.
SQLException
: 对只
转发
结果
集
的
无效
操作
: beforeFirst
at oracle.jdbc.driver.BaseResultSet.beforeFirst(BaseResultSet.
java
:65)
原因(代码简写):
conn = ConnectionFactory.getConnection();
stm = conn.createStatement();
rst = stm.executeQuery(
SQL
);
rst.beforeFir...
stmt=conn.createStatement(ResultSet.TYPE_
SCROLL
_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)
加上括号里的内容就可以了。
ResultSet.TYPE_
SCROLL
_INSENSITIVE
ResultSet对象类型,可滚动,不受其它更改影响。
ResultSet.CONCUR_READ_ON
在遍历结果
集
的时候,用rs.isLast()来判断是否到达最后一条,结果报出异常:
java
.
sql
.
SQLException
: 对只
转发
结果
集
的
无效
操作
: isLast
在网上找到一个解决方法是:
java
代码
PreparedStatement ps = conn.prepareStatement(
sql
, ResultSet.TYPE_
SCROLL
_INSENSITIVE, R...
错误提示:
java
.
sql
.
SQLException
: 对只
转发
结果
集
的
无效
操作
: last
at oracle.jdbc.driver.DatabaseError.throw
SqlException
(DatabaseError.
java
:112)
at oracle.jdbc.driver.DatabaseError.throw
SqlException
(DatabaseError.jav
获得ResultSet的长度可以使用getRow,但是首先要设置ResultSet为可滚动结果
集
,否则会报
java
.
sql
.
SQLException
: 对只
转发
结果
集
的
无效
操作
:
absolute
设置方法为
Statement 的设置方法:Statement stmt=con.createStatement(ResultSet.TYPE_
SCROLL
_INSENSITIVE,ResultSet...
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
1.jdbcTemplate.query
这个方法用于查询
1.1 JdbcTemplate.query(String
sql
, RowMapper<> rowMapper) List
sql
是需要执行查询的数据库语句 rowMapper结果单行处理:就是对返回的结果
集
逐条处理
List userList = jdbcTemplate.query(
sql
, new Row...
pstmt = sourceConn.prepareStatement(find
Sql
);
pstmt.executeUpdate();
rs = pstmt.executeQuery();
rs.last(); //移到最后一行 出错代码行
int rowCount = rs.getRow(); //得到当前行号,也就是记录数
rs.beforeFirst(); //还要用到记录
集
,就把
[ERROR] 2009-03-19 11:04:44 [http-8080-1] com.utils.DbUtil.execute
Sql
(DbUtil.
java
:57)
java
.
sql
.
SQL
Exceptio