- 浏览: 529635 次
- 性别:
- 来自: 山东济南
文章分类
最新评论
-
dragon_8844:
非常不错,nice
java.util.concurrent 多线程框架 -
wusendong:
很好的文章!受益匪浅,谢谢!
java.util.concurrent 多线程框架 -
SINCE1978:
你也关注并发啊
java.util.concurrent 多线程框架 -
lku1314:
这个不错 刚刚找到这个组建 以前孤陋寡闻了 像lz学习!标 ...
quartz 在WEB中应用小结 -
lliiqiang:
人们对于目标需要的需求明确的去做,对于目标以外的因素是随机的执 ...
flex和后端的数据交互(一)--XML和HTTPService
使用Spring JDBC对Oracle10g进行数据库分页的时候出现了异常,错误信息如下:
[ERROR]2971656-2009-05-1815:38:24- [com.ieslab.idp.datamaint.service.impl.DataGridServiceImpl. buildGrid(DataGridServiceImpl.java: 171)]-[]-org.springframework.jdbc.UncategorizedSQLException: StatementCallback; uncategorized SQLException for SQL [select * from (select temp.* ,ROWNUM num from ( select * from idp_pub_m.厂站_VW) temp where ROWNUM <= 4 ) where num > 0]; 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
上面错误中,进行的操作是从一个视图中查询数据并进行分页操作,当单独执行:
select temp.* ,ROWNUM num from ( select * from idp_pub_m.厂站_VW) temp where ROWNUM <= 4
时,是没有错误的,可以成功执行。有网友说是Oracle10g中对返回的结果集中数据精度的定义和9i中不同;例如同样是
select count(*) from ......
语句,在oracle 10g中使用Spring JDBC操作时就会有问题,异常信息同样是 java.sql.SQLException: Invalid scale size. Cannot be less than zero;将SQL语句写为
select count(*)+0 from ......
就可以解决。
这是另一个网友aggie2000 给出的解答,贴于此处,留作备忘。呵呵!
原帖地址是http://forum.springsource.org/showthread.php?t=19848
I have been dealing with the same problem (SQLException - "Invalid
scale size. Cannot be less than zero") and believe I have arrived at a
better solution for those who wish to use the Spring API as much as
possible.
The basic problem, as I understand it, is that there is an
incompatibility between Oracle and the standard CachedRowSet
implementation (CachedRowSetImpl) of Java 1.5. Spring uses this
implementation by default when you call queryForRowSet(...). However,
this does not mean that you cannot use SqlRowSet. The SqlRowSet class
doesn't know anything about the implementation of the CachedRowSet
interface that you're using. The class that is actually utilizing the
CachedRowSetImpl class is the ResultSetExtractor... more specifically,
the SqlRowSetResultSetExtractor (this is used by Spring when you call
queryForRowSet).
In order to achieve the same result (returning a Spring SqlRowSet), you
can pass in your own ResultSetExtractor to the query(...) methods
(*not* queryForRowSet) that take a ResultSetExtractor as a parameter.
What I did was just clone the SqlRowSetResultSetExtractor and instead
of using the standard CachedRowSetImpl class, I replaced it with
Oracle's CachedRowSet implementation. This way, when the ResultSet is
mapped to a CachedRowSet, it uses Oracle's implementation to do so and
thus the incompatibility is eliminated. Here is my ResultSetExtractor
class that does just that...
-------------------------
package com.yada.yada.yada; import java.sql.ResultSet; import java.sql.SQLException; import javax.sql.rowset.CachedRowSet; import org.springframework.dao.DataAccessException; import org.springframework.jdbc.core.ResultSetExtractor; import org.springframework.jdbc.support.rowset.ResultSetW rappingSqlRowSet; import org.springframework.jdbc.support.rowset.SqlRowSet; import oracle.jdbc.rowset.OracleCachedRowSet; public class SqlRowSetOracleResultSetExtractor implements ResultSetExtractor { public Object extractData(ResultSet rs) throws SQLException { return createSqlRowSet(rs); } /** * Create a SqlRowSet that wraps the given ResultSet, * representing its data in a disconnected fashion. * <p>This implementation creates a Spring ResultSetWrappingSqlRowSet * instance that wraps a standard JDBC CachedRowSet instance. * Can be overridden to use a different implementation. * @param rs the original ResultSet (connected) * @return the disconnected SqlRowSet * @throws SQLException if thrown by JDBC methods * @see #newCachedRowSet * @see org.springframework.jdbc.support.rowset.ResultSetW rappingSqlRowSet */ protected SqlRowSet createSqlRowSet(ResultSet rs) throws SQLException { CachedRowSet rowSet = newCachedRowSet(); rowSet.populate(rs); return new ResultSetWrappingSqlRowSet(rowSet); } /** * Create a new CachedRowSet instance, to be populated by * the <code>createSqlRowSet</code> implementation. * <p>This implementation creates a new instance of * Oracle's <code>oracle.jdbc.rowset.OracleCachedRowSet</code> class, * which is their implementation of the Java 1.5 CachedRowSet interface. * @return a new CachedRowSet instance * @throws SQLException if thrown by JDBC methods * @see #createSqlRowSet * @see oracle.jdbc.rowset.OracleCachedRowSet */ protected CachedRowSet newCachedRowSet() throws SQLException { return new OracleCachedRowSet(); } }
-------------------------
You can pass this to the various query methods like so:
SqlRowSet sqlRowSet = (SqlRowSet)jdbcTemplate.query(sql, new SqlRowSetOracleResultSetExtractor());
Hope that helps! Seems to be working for me.
我按照aggie2000 给出的回复解决了这个问题,上面的代码中引用的几个类在Oracle10g的驱动ojdbc14.jar中。至于具体原因,aggie2000 已经给出了答案,欢迎对这个问题熟悉的朋友,回复讨论。
发表评论
-
ubuntu14.04下编译安装Tora
2015-08-11 16:19 1198需预先安装oracle客户端;以下类库,有的可能需要提前安 ... -
ubuntu14.04下oracle客户端最小化安装
2015-08-11 16:04 1047在Oracle官网下载Oracle Instant Clien ... -
ubuntu14.04下编译安装QT
2015-08-11 16:03 14931. 首先配置一些编译Qt ... -
55种开源可视化数据分析工具
2015-07-22 14:50 0http://mp.weixin.qq.com/s?__bi ... -
响应式设计理念
2013-09-29 10:00 0概念 响应式Web设计(Responsive Web desi ... -
Liferay 使用随笔
2010-04-19 14:18 01.如何根据权限去除每一个portlet中右上角的选项。 关于 ... -
Liferay中ajax应用用户session超时
2010-03-26 09:31 3905基于Liferay Portal开发ajax应用时,如果长时间 ... -
Liferay portlet实例化配置
2009-11-10 09:06 4362在默认的情况下,一个p ... -
带checkbox的dhtmlxtree菜单树异步加载时的问题解决
2009-10-24 11:27 5953最近一直很忙,自己负责几个模块的设计开发,还有和其他服务接口的 ... -
JS代码示例
2009-10-21 14:23 22761.数组操作时的push var a = [],b = [ ... -
dhtmlxtree异步加载时的一个bug修正
2009-09-15 10:00 3802前面已经对dhtmlx的东西有所介绍,使用中也发现了不少bug ... -
WEB Page to PDF
2009-06-17 11:10 2520现在有很多网页页面转换成PDF文档的支持项目,我使用的是pd4 ... -
Liferay中使用dhtmlxlayout在IE下的问题
2009-06-12 13:43 2086Liferay 中使用dhemtlx系列UI的时候,dhtml ... -
Liferay相关配置
2009-06-10 13:35 1249修改liferay中portlet的加载目录 前面 ... -
Dynamic Tables In JavaScript for IE and Firefox
2009-05-06 14:03 1703http://www.sweetvision.com/2007 ... -
liferay中对struts桥接处理后的response
2009-04-18 14:29 1827对于在liferay开发平台中 ... -
liferay开发小记---Struts,Spring,Hibernate架构
2009-04-07 11:11 6248liferay有自己的struts和spring扩展,有兴趣的 ... -
liferay开发小记---portlet文件构造
2009-04-03 17:09 3276书接上回,说说portlet的开发,每一个portlet就是对 ... -
liferay开发小记---开发环境的搭建
2009-04-02 13:42 3795用惯了MyEclipse,我的环境也是在它上面搭建的,试用过M ... -
跨域访问解决办法之java网络编程
2008-10-11 22:35 9194颓废了很长时间,还是心态问题! 项目中有不少地方需要跨域访 ...
相关推荐
ARCore(Android的增强现实):ARCore性能优化与调试技巧
停止维护 基于 ReactNative、Redux 的漫画
HIKVISION海康威视DS-7916N-E4 DS-7932N-E4硬盘录像机固件V3.4.106 build 200619版(2020年6月22日发布) 新版固件支持解绑萤石云功能。 注意: 设备升级有风险,请确认是否一定要升级设备。 请确认升级程序包是否适用于您的设备。 在设备升级过程中请勿断电。
2001-2023年上市公司企业平台生态嵌入数据含原始数据+计算代码+计算结果-最新出炉.zip
基于SSM的毕业设计源码
Wappalyzer 是一个跨平台实用程序,可揭示网站上使用的技术。它可以检测内容管理系统、电子商务平台、网络框架、服务器软件、分析工具等等。
金融工程之量化交易算法:动量交易:动量交易策略的实证分析.docx
知识管理系统的出现,旨在满足企业和组织对于知识资源的有效管理、共享和利用的需求。该系统集成了多个功能模块,旨在为用户提供一个全面、便捷的知识管理平台。 系统界面设计简洁明了,导航链接清晰易懂。其中,“首页”作为系统的入口,提供了快速访问其他功能模块的链接。而“个人中心”、“修改密码”和“个人信息”等模块则用于管理用户账户和个人信息,确保系统的安全性和用户隐私的保护。 在知识管理方面,“文章分类管理”和“文章信息管理”模块允许用户对文章进行分类和编辑,便于知识的组织和查找。同时,“资料分类管理”和“资料下载管理”模块则提供了对各类资料的分类存储和下载功能,方便用户获取所需的知识资源。 此外,系统还集成了“问答管理”、“论坛交流”和“留言板管理”等互动功能模块。这些模块不仅为用户提供了一个交流和分享知识的平台,还有助于激发用户的参与度和活跃度,促进知识的传播和创新。 最后,“系统管理”模块作为系统的后台管理区域,提供了对系统配置、用户权限和数据安全等方面的管理功能。这一模块确保了系统的稳定运行和安全性,为知识管理提供了坚实的保障。
https://github.com/chaojie/ComfyUI-AniPortrait/blob/main/wf.json
1基于 MATLAB 的完整项目开发示例--图像处理和特征提取项目.docx
16.根据类别查询菜品.mp4
金融工程之量化交易算法:动量交易:动量交易策略的优化与改进.docx
通用面试技巧-常见面试问题.zip
技术资料分享THC63LVDM83D非常好的技术资料.zip
技术资料分享SY8009非常好的技术资料.zip
技术资料分享信利4.3单芯片TFT1N4633-Ev1.0非常好的技术资料.zip
windows文件操作
电调测试程序 https://blog.csdn.net/weixin-45902229/article/details/121
qpress-11-linux-x64.tar
金融工程之量化交易算法:订单流交易:Python在量化交易中的应用.docx