我有这个字符串说reference
='2039487894563827398440987
'
我正在尝试通过执行类似
的操作将其转换为BigIntegerdef reference = new BigInteger(reference)
然后在准备好的声明中我将其设置为
ps.setLong(reference);
我正在映射此值的数据库column(XYZ)
包含dataType
BigInt(40)
。但是当我执行语句时,它显示异常:
SQLSTATEEXCEPTION: Out of range value of column `XYZ` at row 1
如何应对这种情况。
修改:也尝试了setBigDecimal(reference);
。
答案 0 :(得分:1)
您可以使用setBigDecimal()而不是setLong()。
答案 1 :(得分:1)
您的号码对于MySQL BIGINT列来说太大了。如果您阅读these docs - 您会看到BIGINT数据类型不能占用如此大的数字(最大值为±9223372036854775807已签名,或18446744073709551615无符号)。有关不同服务器类型的更全面的文档查看,请参阅this answer。
如果您可以更改数据库中的类型,您可能需要考虑将其更改为NUMERIC字段,或将数字存储为字符串,或将其转换为字节数组并将其存储为二进制blob。
<强> 编辑: 强>
完整性 - 如果有人对40
在BIGINT(40)
中的含义感到困惑。它几乎没有任何意义。它肯定不会影响存储的数字大小 - 总是8字节(64位)。这是数据库中有关如何显示数字的提示 - 即显示前40位数字。它可能会影响零填充 - 例如如果您将值123456789
和5
放入BIGINT(5)
列,则它们可能会显示为123456789
和00005
。检查the docs是否有其他可用类型。
请注意,BigInt字段可存储的最长数字在基数10中为20位数,因此40
实际上几乎没有任何意义。