使用Spring JDBC对Oracle10g进行查询操作时出现了异常,代码与错误信息如下:
代码:
String sql = "select * from t_customer";
SqlRowSet rowSet = new JdbcTemplate(this.dataSource).queryForRowSet(sql);
后台异常:
StatementCallback; uncategorized SQLException for SQL [select * from T_customer]; SQL state [null]; error code [0]; Invalid scale size. Cannot be less than zero; nested exception is java.sql.SQLException: Invalid scale size. Cannot be less than zero
该方法使用Sql Server是没有问题的。
在网上查看相关资料,得到以下解决方法:
public class SqlRowSetOracleResultSetExtractor implements ResultSetExtractor {
public Object extractData(ResultSet rs) throws SQLException {
return createSqlRowSet(rs);
}
}
protected SqlRowSet createSqlRowSet(ResultSet rs) throws SQLException {
CachedRowSet rowSet = newCachedRowSet();
rowSet.populate(rs);
return new ResultSetWrappingSqlRowSet(rowSet);
}
protected CachedRowSet newCachedRowSet() throws SQLException {
return new OracleCachedRowSet();
}
然后将原来代码改成如下即可:
SqlRowSet rowSet = (SqlRowSet)new JdbcTemplate(this.dataSource).query(sql, new SqlRowSetOracleResultSetExtractor());
上述方法经本人测试确实可行,附oracle10g的驱动jar包ojdbc14.jar(OracleCachedRowSet类需要)。
相关文章参见:
http://www.hezubbs.cn/html/java/200905/Spring-JDBCduiOracle10gshujukucaozuoshiRowSetdewenti_5994.html