Spring Jdbc对oracle10g数据库做queryForRowSet操作的问题

使用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

你可能感兴趣的:(spring,html,sql,jdbc,SQL Server)