Java 无效的比例大小。不能小于零
我正在使用spring-2.5.6通过org.apache.commons.dbcp.BasicDataSource从独立应用程序连接到Oracle 10g数据库(ojdbc14.jar)。当我尝试使用Java 无效的比例大小。不能小于零,java,sql,oracle,spring,oracle10g,Java,Sql,Oracle,Spring,Oracle10g,我正在使用spring-2.5.6通过org.apache.commons.dbcp.BasicDataSource从独立应用程序连接到Oracle 10g数据库(ojdbc14.jar)。当我尝试使用公共SqlRowSet queryForRowSet(String sql,Object[]args)检索SqlRowSet时抛出DataAccessException方法,我得到的是“java.sql.SQLException:无效的缩放大小”。不能小于零' 调用该表的sql是: select
公共SqlRowSet queryForRowSet(String sql,Object[]args)检索SqlRowSet时抛出DataAccessException
方法,我得到的是“java.sql.SQLException:无效的缩放大小”。不能小于零'
调用该表的sql是:
select CUSTAREADESC, BEGCOL, COLLENGTH from CUSTOMERAREA where upper(trim(FLEET)) = upper(trim(?)) and CUSTAREANO = ?
BEGCOL和COLLENGTH列为数据类型编号,未定义精度
我发现了一些关于这个问题的信息,似乎是Oracle驱动程序和Sun的com.Sun.rowset.CachedRowSetImpl实现之间不兼容
他们建议将sql更改为以下内容作为解决方法
select CUSTAREADESC, (BEGCOL + 0) BEGCOL, (COLLENGTH + 0) COLLENGTH from CUSTOMERAREA where upper(trim(FLEET)) = upper(trim(?)) and CUSTAREANO = ?
有谁知道一个更好的通用解决方案,它不涉及任何列未定义精度的现有表的自定义sql?您使用的是什么Oracle Jar?尝试升级到最新版本(假设您使用的是JDK 5或更高版本)。我相信最新的ojdbc5.jar[或ojdbc6.jar]已经解决了这个问题——它是由Oracle的驱动程序不正确支持CachedRowSet接口引起的
下载链接:您使用的是什么Oracle Jar?尝试升级到最新版本(假设您使用的是JDK 5或更高版本)。我相信最新的ojdbc5.jar[或ojdbc6.jar]已经解决了这个问题——它是由Oracle的驱动程序不正确支持CachedRowSet接口引起的 下载链接:尝试以下查询:
select NVL(CUSTAREADESC, '0'), (NVL(BEGCOL,0) + 0) BEGCOL, (NVL(COLLENGTH, 0) + 0) COLLENGTH
from CUSTOMERAREA
where NVL(upper(trim(NVL(FLEET, ''))), '') = NVL(upper(trim(NVL(?, ''))), '')
and NVL(CUSTAREANO, '0') = NVL(?, '')
SQL异常是否仍在发生?请尝试以下查询:
select NVL(CUSTAREADESC, '0'), (NVL(BEGCOL,0) + 0) BEGCOL, (NVL(COLLENGTH, 0) + 0) COLLENGTH
from CUSTOMERAREA
where NVL(upper(trim(NVL(FLEET, ''))), '') = NVL(upper(trim(NVL(?, ''))), '')
and NVL(CUSTAREANO, '0') = NVL(?, '')
SQL异常是否仍在发生?我最终创建了一个ResultSetTextActor类,该类实现ResultSetTextRactor,并用于获取SqlRowSet的OracleCachedRowSet实现。要使用它,您需要在项目中包含oracle驱动程序jar(使用ojdbc14.jar) 然后,通过以下方式使用它来提取SqlRowSet
SqlRowSet rs = (SqlRowSet) this.jdbcTemplate.query(SELECT_CUSTOMER_AREA,
new Object[]{new SqlParameterValue(Types.VARCHAR, companyId),
new SqlParameterValue(Types.NUMERIC, areaNumber)},
new SqlRowSetOracleResultSetExtractor());
我最终创建了一个ResultSetTextActor类,该类实现了ResultSetTextRactor,并使用它来获取SqlRowSet的OracleCachedRowSet实现。要使用它,您需要在项目中包含oracle驱动程序jar(使用ojdbc14.jar) 然后,通过以下方式使用它来提取SqlRowSet
SqlRowSet rs = (SqlRowSet) this.jdbcTemplate.query(SELECT_CUSTOMER_AREA,
new Object[]{new SqlParameterValue(Types.VARCHAR, companyId),
new SqlParameterValue(Types.NUMERIC, areaNumber)},
new SqlRowSetOracleResultSetExtractor());
此错误是由Oracle JDBC驱动程序中的不兼容引起的。您可以通过将系统属性oracle.jdbc.j2ee13 compliant设置为true来修复它。例如,在命令行上:
java-Doracle.jdbc.J2EE13Compliant=true
此错误是由Oracle jdbc驱动程序中的不兼容引起的。您可以通过将系统属性oracle.jdbc.j2ee13 compliant设置为true来修复它。例如,在命令行上:
java-Doracle.jdbc.J2EE13Compliant=true
如果您使用的是oracle 10g,并且您的数字列定义为数字而不是刻度大小
create table EXAMPLE
(
FILED1 NUMBER(2,0),
FILED2 NUMBER
)
填充字段2时,您将收到此异常
检查表结构中的数字字段
我希望这能对您有所帮助。如果您使用的是oracle 10g,并且您的数字列定义了数字和无刻度大小
create table EXAMPLE
(
FILED1 NUMBER(2,0),
FILED2 NUMBER
)
填充字段2时,您将收到此异常
检查表结构中的数字字段
我希望这能对你有所帮助