Spring:jdbc模板中的上一行[重复]
Posted
技术标签:
【中文标题】Spring:jdbc模板中的上一行[重复]【英文标题】:Spring : previous Line in jdbc template [duplicate] 【发布时间】:2016-03-30 09:55:09 【问题描述】:我有这个要求:
private List<IWsResponse> getBPartnerDetails(String valueNetwork, String reportLevel2)
JdbcTemplate tm = new JdbcTemplate(ds.getDataSource());
StringBuffer sql = new StringBuffer("SELECT * FROM XRV_BPARTNERDETAILS where rownum < 10 order by BPartner_ID");
response = tm.query(sql.toString(), new BPartnerMapper());
return response;
在BPartnerMapper
,我想做以下事情:
获取 ResultSet 中的先前元素以将其与实际行进行比较
@Override
public IWsResponse mapRow(ResultSet rs, int rowNum) throws SQLException
rs.previous();
int prev_Bpartner_ID = rs.getInt("BPARTNER_ID");
int prev_Location_ID = rs.getInt("BPARTNER_LOCATION_ID");
int prev_User_ID = rs.getInt("User_ID");
rs.next();
int Bpartner_ID = rs.getInt("BPARTNER_ID");
int Location_ID = rs.getInt("BPARTNER_LOCATION_ID");
int User_ID = rs.getInt("User_ID");
// My code
我在rs.previous()
中收到错误:
java.sql.SQLException: Invalid operation for forward only resultset : previous
我该如何解决这个问题以获得resultSet
的previous
元素
【问题讨论】:
在您创建Statement
的位置发布代码
你不应该首先在RowMapper
中使用next()
或previous()
。您应该使用ResultSetExtractor
并简单地迭代结果(保留最后一个并与下一个进行比较)。而不是来回走动。您也不应该在每次需要时都创建一个JdbcTemplate
,因为它是一个很重的构造对象,所以在性能方面不是很聪明。
你的用例是什么,为什么需要做这个比较?
【参考方案1】:
您不能在 ResultSet 上调用 prev()
或 next()
,因为它已为当前行预初始化。
来自mapRow()
的Spring文档:
实现必须实现此方法来映射 ResultSet 中的每一行数据。此方法不应在 ResultSet 上调用 next();它只应该映射当前行的值。
你应该做的是:
-
从您的
query()
中获取ArrayList
。
迭代此列表并进行所需的比较。
【讨论】:
以上是关于Spring:jdbc模板中的上一行[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Spring04-SpringEL&Spring JDBC数据访问