我正在使用 spring-2.5.6 使用 org.apache.commons.dbcp.BasicDataSource 从独立应用程序连接到 Oracle 10g 数据库 (ojdbc14.jar)。当我尝试使用该public SqlRowSet queryForRowSet(String sql, Object[] args) throws DataAccessException
方法检索 SqlRowSet 时,我得到一个 'java.sql.SQLException: Invalid scale size。不能小于零'。
调用表的sql是:
select CUSTAREADESC, BEGCOL, COLLENGTH from CUSTOMERAREA where upper(trim(FLEET)) = upper(trim(?)) and CUSTAREANO = ?
BEGCOL 和 COLLENGTH 列属于未定义精度的数据类型 number。
我发现了一些关于这个问题的信息,似乎是 Oracle 驱动程序与 Sun 的 com.sun.rowset.CachedRowSetImpl 实现不兼容。
Java 数据库连接 (JDBC) - 填充 CachedRowSet 产生 SQLException: Invalid scale size
使用带有子查询分解 SQL 的 queryForRowSet 会产生错误
他们建议将 sql 更改为以下内容作为解决方法。
select CUSTAREADESC, (BEGCOL + 0) BEGCOL, (COLLENGTH + 0) COLLENGTH from CUSTOMERAREA where upper(trim(FLEET)) = upper(trim(?)) and CUSTAREANO = ?
有谁知道一个更好的通用解决方案,它不涉及任何现有表的自定义 sql,其中列没有定义精度?