应用背景:项目中有个业务功能是需要存储第三方的一个钱包信息(如百度钱包),包括总余额,冻结金额等信息,总余额字段单位是精确到分,所以开发经理当时设计的数据库字段类型是int类型,对应实体类Integer。那时候我们不知道第三方钱包金额到底上限是多大。
问题描述:按照这种设计开发完业务功能以后,第三方对接人在测试环境造了6千万的一个测试余额数据供我们测试。结果就报Integer的存储数据问题:NumberFormatException
解决方案:java中int的存储数据范围是:
最小值:Integer.MIN_VALUE= -2147483648 (-2的31次方)
最大值:Integer.MAX_VALUE= 2147483647 (2的31次方-1)
6043041655分六千多万,精确到分6043041655大于2147483647。故存储失败。
第一种解决方式:将java的Integer换为BigDecimal,将数据库字段类型换为bigint。
第二种解决方式:将java的Integer换为String,将数据库字段类型换为varchar。