[进行数据库(mysql5.0)查询时出现如下异常:nested exception is java.sql.SQLException: Unknown type 246 in column 1 of 3 in binary-encoded result set. 之所以这里又

错误现象

今天调试一段代码,里面有个逻辑,要批量取数据;当运行取到第二批数据的时候,程序报了如下错误:

org.springframework.jdbc.UncategorizedSQLException: StatementCallback; uncategorized SQLException for SQL [select * from (select t.*,rownum rnm from (select distinct vc.id,

vc.member_id,

vc.order_id,

vc.attribute,

vc.un_service_day,

vc.benefit_customer_id,

vc.gmt_target_end,

vc.biz_status,

vc.ultimate_price,

vc.payment_amount,

vc.num

from ord_order_item vc

where biz_status in ('service', 'issue_ready')

and gmt_target_end < trunc(sysdate, 'dd')

and is_deleted = 'n'

and vc.parent_id + 0 = 0 ) t where rownum<=18000 ) where rnm>9000]; SQL state [null]; error code [17026]; 数字溢出; nested exception is java.sql.SQLException: 数字溢出

第一批是rownum<=9000,rnm>0是能正常运行 的。

解决方案

找到出错的代码进行debug,一层层跟进去后,发现在上面的sql执行后,会把数据做一个如下的操作:

List results = (this.rowsExpected > 0 ? new ArrayList(this.rowsExpected) : new ArrayList());

int rowNum = 0;

while (rs.next()) {

results.add(this.rowMapper.mapRow(rs, rowNum++));

}这个rowMapper.mapRow的操作是:

Map resultMap = new HashMap();

resultMap.put("id", rs.getInt("ID"));

resultMap.put("orderId", rs.getInt("ORDER_ID"));

resultMap.put("attribute", rs.getString("ATTRIBUTE"));

resultMap.put("memberId", rs.getString("MEMBER_ID"));

resultMap.put("unServiceDay", rs.getBigDecimal("UN_SERVICE_DAY"));

resultMap.put("benefitCustomerId", rs.getInt("BENEFIT_CUSTOMER_ID"));

resultMap.put("gmtTargetEnd", rs.getDate("GMT_TARGET_END")!=null?DateUtils.truncate(rs.getDate("GMT_TARGET_END"),Calendar.DAY_OF_MONTH):null);

resultMap.put("bizStatus", rs.getString("BIZ_STATUS"));

resultMap.put("ultimatePrice", rs.getBigDecimal("ULTIMATE_PRICE"));这个映射如果不成功,就会抛java.sql.SQLException异常。仔细想了想数字溢出,会不会是上面的类有数据转成对应数据类型的时候报出来的?

int类型的数据范围是:-2147483648...2147483647。数据库里面再查了下转化类里面的int的字段最大值,果然发现有条记录的ID为31342135233,大大超过了整型的数据范围,所以程序执行到rs.getInt("ID")时就出错了。

把出错ID修改后,程序执行就正常了!

[前段时间做一个后台系统,在开发测试环境应用运行的非常良好,没有出现任何的问题。 当测试完成上预发布时问题出现了,应用运行非常缓慢,一直停在某一个地方不执行,最

问题反思

1,.看来数字溢出这种出错,有数字对应的类型溢出的意思,不过出错信息还是少了点,而且抛的异常也没有达成对应的出错类,对应调用方查找出错原因花了一些时间。虽然是javaSql自带的出错信息,但如果能稍微封装下也明确不少阿。

2.数据库使用的是oracle,id定义的类型为number,没有定义精度,位数。一般定义Number的方法:Number(p,s),其中p,s都是可选的:

a、p代表精度,默认为38

b、s代表小数位数,取值范围-84~127,默认取值要看是否指定了p,如果制定了p,默认s为0,如果没有指定p,默认取最大值。 而目前的数据库中默认,那么就是Number(38,0),所以随着数据表中数据的增长,这会是个潜在的安全隐患。

3.再复习下数据库字段定义的相关知识:

1> NUMBER(p,s):固定精度数字类型

2> NUMBER:不固定精度数字类型,当不确定数字的精度时使用,PK通常使用此类型

3> DATE:当仅需要精确到秒时,选择DATE而不是TIMESTAMP类型

VARCHAR2:变长字符串,最长4000个字节

4> CLOB:当超过4000字节时使用,但是要求这个字段必须单独创建到一张表中,然后有PK与主表关联。此类型应该尽量控制使用

[Q:org.springframework.transaction.CannotCreateTransactionException: Could not open JDBC Connection for transaction; nested exception is java.sql.SQLException:

java sql数字溢出_nested exception is java.sql.SQLException: 数字溢出的问题解决相关推荐

  1. 解决bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: ORA-00911: 无效字符

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 1. 报错: ### Cause: java.sql.SQLSyntaxErrorException ...

  2. bad SQL grammer []; nested exception is java.sql.SQLSyntaxErrorException:ORA-00918:未明确定义列

    出现这个问题主要是因为列名重复,导致不能明确定义列. 很多表及字段关联以后,往往会出现这个问题,还是要细心才能解决.

  3. 报错java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.String解决踩坑

    java.lang.ClassCaption: java.lang.Long cannot be cast to java.lang.String 问题背景 service传参调用mapper,报错: ...

  4. nested exception is java.sql.SQLException: Data truncated for column 'PassWord' at row 72

    tomcat启动没有错误,进入登录界面发现登不进去,出现错误: 2016-08-17 14:52:44 -43568 [http-8080-4] DEBUG   - ==>  Preparing ...

  5. Field ‘gmt_create‘ doesn‘t have a default value; nested exception is java.sql.SQLException: Field ‘g

    涉及技术: SpringBoot 测试出错: IDEA 添加数据时出错 org.springframework.dao.DataIntegrityViolationException: ### Err ...

  6. Could not get JDBC Connection; nested exception is java.sql.SQLException: Cannot get a connection, p

    报文: ### The error occurred while executing a query ### Cause: org.springframework.jdbc.CannotGetJdbc ...

  7. nested exception is java.sql.SQLException: HOUR_OF_DAY: 0 -> 1

    Cause: java.sql.SQLException: HOUR_OF_DAY: 0 -> 1 HOUR_OF_DAY: 0 -> 1; nested exception is jav ...

  8. Could not get JDBC Connection; nested exception is java.sql.SQLException:

    报错信息: Could not get JDBC Connection; nested exception is java.sql.SQLException: The server time zone ...

  9. Java异常:RuntimeException和Exception的区别

    Java设置了异常,旨在鼓励将方法中可能出现的异常告知给使用此方法的程序员.当然了,这种方法是比较优雅的,让我们确切的知道是在哪里出了错,并提供了异常捕获.本篇文章主要对Java中的异常进行介绍与区分 ...

最新文章

  1. [bzoj1061] [NOI2008]志愿者招募
  2. 为什么需要IP地址?—Vecloud微云
  3. ABAP常见面试问题
  4. 小叮咚切分词方法加入sourceforge.net中WebLucene分词模块
  5. java赋值语句_java并发编程之原子性问题
  6. linux sh 必要,Linux Shell学习之基础篇(不适合学习,仅为本人笔记)
  7. 一个flash前后台开源框架的的站点
  8. Odoo12中删除无效项目
  9. nexttick使用场景_Vue -- nextTick
  10. python求解按等级分配糖果问题
  11. 自动化企业人才如何定位?
  12. MapInfo mif/mid文件说明
  13. HTTP 请求头 Header
  14. 计算机音量程序是哪个键,计算机键盘上的哪个键是音量
  15. 欢迎使JMKAJL KAJLKFJD
  16. button按钮的tittle 折行且居中显示
  17. 数据运营分析多年,我只推荐这些书
  18. UMLChina建模竞赛第3赛季第10轮:汽车、EA
  19. linux 删除卸载软件
  20. 湖南师范大学2018年大学生程序设计竞赛新生赛 J 名哥的完全平方数 莫队算法

热门文章

  1. SpringBoot----[9]---Spring Boot JdbcTemplate
  2. 最大公约数、最小公倍数算法思想
  3. java——百钱买百鸡
  4. bolt在java_Storm Bolt接口
  5. 《就业乱世,如何正面应战!【所长】》笔记
  6. 大数据毕设选题 - 旅游数据分析可视化系统(python 大数据)
  7. 【AI浅谈】AI算法,用尽可能简单的话讲懂AI的原理【1】
  8. ATMEL AT91xxxxx Test Board驱动
  9. vim 光标十字定位和对齐线
  10. 安装JAVA SE/jdk后,未发现jdk/lib的tools.jar和dt.jar文件