java sql数字溢出_nested exception is java.sql.SQLException: 数字溢出的问题解决
[进行数据库(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: 数字溢出的问题解决相关推荐
- 解决bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: ORA-00911: 无效字符
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 1. 报错: ### Cause: java.sql.SQLSyntaxErrorException ...
- bad SQL grammer []; nested exception is java.sql.SQLSyntaxErrorException:ORA-00918:未明确定义列
出现这个问题主要是因为列名重复,导致不能明确定义列. 很多表及字段关联以后,往往会出现这个问题,还是要细心才能解决.
- 报错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,报错: ...
- 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 ...
- Field ‘gmt_create‘ doesn‘t have a default value; nested exception is java.sql.SQLException: Field ‘g
涉及技术: SpringBoot 测试出错: IDEA 添加数据时出错 org.springframework.dao.DataIntegrityViolationException: ### Err ...
- 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 ...
- 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 ...
- 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 ...
- Java异常:RuntimeException和Exception的区别
Java设置了异常,旨在鼓励将方法中可能出现的异常告知给使用此方法的程序员.当然了,这种方法是比较优雅的,让我们确切的知道是在哪里出了错,并提供了异常捕获.本篇文章主要对Java中的异常进行介绍与区分 ...
最新文章
- [bzoj1061] [NOI2008]志愿者招募
- 为什么需要IP地址?—Vecloud微云
- ABAP常见面试问题
- 小叮咚切分词方法加入sourceforge.net中WebLucene分词模块
- java赋值语句_java并发编程之原子性问题
- linux sh 必要,Linux Shell学习之基础篇(不适合学习,仅为本人笔记)
- 一个flash前后台开源框架的的站点
- Odoo12中删除无效项目
- nexttick使用场景_Vue -- nextTick
- python求解按等级分配糖果问题
- 自动化企业人才如何定位?
- MapInfo mif/mid文件说明
- HTTP 请求头 Header
- 计算机音量程序是哪个键,计算机键盘上的哪个键是音量
- 欢迎使JMKAJL KAJLKFJD
- button按钮的tittle 折行且居中显示
- 数据运营分析多年,我只推荐这些书
- UMLChina建模竞赛第3赛季第10轮:汽车、EA
- linux 删除卸载软件
- 湖南师范大学2018年大学生程序设计竞赛新生赛 J 名哥的完全平方数 莫队算法
热门文章
- SpringBoot----[9]---Spring Boot JdbcTemplate
- 最大公约数、最小公倍数算法思想
- java——百钱买百鸡
- bolt在java_Storm Bolt接口
- 《就业乱世,如何正面应战!【所长】》笔记
- 大数据毕设选题 - 旅游数据分析可视化系统(python 大数据)
- 【AI浅谈】AI算法,用尽可能简单的话讲懂AI的原理【1】
- ATMEL AT91xxxxx Test Board驱动
- vim 光标十字定位和对齐线
- 安装JAVA SE/jdk后,未发现jdk/lib的tools.jar和dt.jar文件