- 浏览: 530689 次
- 性别:
- 来自: 山东济南
文章分类
最新评论
-
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 1205需预先安装oracle客户端;以下类库,有的可能需要提前安 ... -
ubuntu14.04下oracle客户端最小化安装
2015-08-11 16:04 1053在Oracle官网下载Oracle Instant Clien ... -
ubuntu14.04下编译安装QT
2015-08-11 16:03 14991. 首先配置一些编译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 3913基于Liferay Portal开发ajax应用时,如果长时间 ... -
Liferay portlet实例化配置
2009-11-10 09:06 4369在默认的情况下,一个p ... -
带checkbox的dhtmlxtree菜单树异步加载时的问题解决
2009-10-24 11:27 5965最近一直很忙,自己负责几个模块的设计开发,还有和其他服务接口的 ... -
JS代码示例
2009-10-21 14:23 22791.数组操作时的push var a = [],b = [ ... -
dhtmlxtree异步加载时的一个bug修正
2009-09-15 10:00 3805前面已经对dhtmlx的东西有所介绍,使用中也发现了不少bug ... -
WEB Page to PDF
2009-06-17 11:10 2533现在有很多网页页面转换成PDF文档的支持项目,我使用的是pd4 ... -
Liferay中使用dhtmlxlayout在IE下的问题
2009-06-12 13:43 2093Liferay 中使用dhemtlx系列UI的时候,dhtml ... -
Liferay相关配置
2009-06-10 13:35 1253修改liferay中portlet的加载目录 前面 ... -
Dynamic Tables In JavaScript for IE and Firefox
2009-05-06 14:03 1708http://www.sweetvision.com/2007 ... -
liferay中对struts桥接处理后的response
2009-04-18 14:29 1833对于在liferay开发平台中 ... -
liferay开发小记---Struts,Spring,Hibernate架构
2009-04-07 11:11 6256liferay有自己的struts和spring扩展,有兴趣的 ... -
liferay开发小记---portlet文件构造
2009-04-03 17:09 3277书接上回,说说portlet的开发,每一个portlet就是对 ... -
liferay开发小记---开发环境的搭建
2009-04-02 13:42 3800用惯了MyEclipse,我的环境也是在它上面搭建的,试用过M ... -
跨域访问解决办法之java网络编程
2008-10-11 22:35 9197颓废了很长时间,还是心态问题! 项目中有不少地方需要跨域访 ...
相关推荐
8. Spring Data JPA与MyBatis:Spring框架中的数据访问层解决方案,如Spring Data JPA和MyBatis,使得数据库操作更加简洁和高效。 通过《Java数据库高级编程宝典》的配套光盘,读者不仅可以学习到JDBC的基础知识,...
import org.springframework.jdbc.support.rowset.ResultSetWrappingSqlRowSet; import org.springframework.jdbc.support.rowset.SqlRowSet; import org.springframework.jdbc.support.rowset.SqlRowSetMetaData; ...
Configuration Layer负责加载数据库配置信息,SqlSession Layer负责提供对数据库的访问接口,而Executor Layer负责执行SQL语句。 1.1.2 MyBatis与J2EE MyBatis支持J2EE规范,能够与J2EE应用程序集成,提供了简洁的...
3. **JDBC**:Java数据库连接(JDBC)是与数据库交互的基础,需要了解JDBC的基础知识,如连接池的使用,如何利用DataSource和RowSet进行数据操作,以及如何通过JDBC连接Oracle和MySQL。 4. **Web前端技术**:HTML、...
掌握不同数据库(如Oracle和MySQL)的JDBC特定操作。 4. **HTML/CSS/JavaScript**:HTML用于网页结构,CSS用于样式,JavaScript负责交互。理解基础语法,掌握表单验证、DOM编程(事件处理)以及常见JavaScript效果...
2. **数据库**: 掌握SQL语言,包括对Oracle或MySQL的操作,如单表查询、多表连接(内连接、外连接)、子查询。管理数据库对象如表、视图、索引、序列和约束。树状结构存储数据,学习存储过程和触发器的创建和调用。 ...
要熟悉连接池的使用,如C3P0或DBCP,理解DataSource和RowSet,以及Oracle和MySQL的连接方式。 4. **HTML/CSS/JavaScript**:网页制作的三大基础,HTML负责内容结构,CSS负责样式表现,JavaScript负责交互行为。...
3. **JDBC**:Java数据库连接,用于与数据库交互。理解JDBC的基础,如建立连接、执行SQL、处理结果集。掌握连接池(如C3P0、DBCP、HikariCP)的使用,以及DataSource和RowSet接口。针对Oracle和MySQL,熟悉其特定的...
3. **JDBC(Java Database Connectivity)**:JDBC是Java连接数据库的标准接口,包括基础的数据库连接、数据源DataSource和RowSet的使用。理解JDBC连接Oracle和MySQL的差异。 4. **Web前端技术**:HTML、CSS和...
3. **JDBC**:学习JDBC基础知识,如连接数据库,执行SQL,处理结果集,理解连接池的概念,使用DataSource和RowSet,以及针对Oracle和MySQL的特定操作。 4. **前端技术**:HTML,CSS,JavaScript的基本语法,用于...
- **JDBC对标准的扩展(JNDI)**:介绍如何使用Java命名和目录接口(JNDI)来查找和获取数据库连接。 #### Hibernate 3.0 - **Hibernate的简介**:概述Hibernate框架的核心概念和优势。 - **Hibernate的工作原理**:...
掌握RowSet和ResultSet的使用,以及与Oracle和MySQL的JDBC连接。 5. **HTML/CSS/JavaScript**:熟悉HTML、CSS和JavaScript的基本语法,理解DOM编程和事件处理。学习如何使用JavaScript实现常见效果,如TreeView和...
- JDBC提供了多种异常类型来处理数据库操作中可能出现的问题。 **4. JDBC中的事务** - 通过设置`Connection`对象的事务隔离级别和自动提交状态来控制事务行为。 **5. JDBC2.0新特性** - 包括Statement接口的改进、...
- **DataSource&RowSet**:`DataSource`接口提供了一种获取数据库连接的标准化方式,而`RowSet`提供了离线操作数据集的能力。 #### 四、前端技术(HTML、CSS、JavaScript) - **HTML/CSS**:HTML用于定义网页结构,...
- **JDBC API**:了解如何使用JDBC进行数据库操作。 - **连接池技术**:如DataSource、RowSet等,提高数据库访问效率。 - **Oracle/MySQL**:具体实现与这些数据库的交互。 #### 四、前端技术基础 - **...
- **Oracle与MySQL**:对比这两种流行的数据库管理系统,并介绍其基本操作命令。 - **SQL语言**:熟练使用SQL进行数据查询、插入、更新和删除操作。 - **事务处理**:理解事务的概念及其在实际业务中的应用。 #### ...
学习资源包括书籍和视频,如《Java就业培训教程》、《Java就业培训教程视频》、《从实践中学习Oracle/SQL》和《传智播客JDBC视频》等。 4. **Web开发基础**: - **HTML/CSS/JavaScript**:掌握网页开发的基础,...