Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无效的比例大小。不能小于零_Java_Sql_Oracle_Spring_Oracle10g - Fatal编程技术网

Java 无效的比例大小。不能小于零

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

我正在使用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 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时,您将收到此异常

检查表结构中的数字字段

我希望这能对你有所帮助