You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从JTable读取数据存入MySQL Double字段时遇数字格式异常的解决办法

解决JTable中带逗号的数字字符串转Double存入MySQL的问题

这个问题的核心很明确:你的数字字符串用逗号作为小数点分隔符,但Java默认的Double.parseDouble()只识别英文句点(.)作为小数点,所以才会抛出NumberFormatException。下面给你几个可靠的解决方案:

方案1:用本地化数字解析器(最稳妥)

如果你的JTable数据来自使用逗号作为小数点的地区(比如欧洲多数国家),推荐使用NumberFormat类来解析,它能自动适配不同地区的数字格式:

String paymentStr = (String) jTable1.getValueAt(row, 2);

// 选择对应地区的Locale,比如德国(逗号做小数点)
NumberFormat numberFormat = NumberFormat.getInstance(Locale.GERMANY);
try {
    Number paymentNum = numberFormat.parse(paymentStr);
    double pay = paymentNum.doubleValue();
    // 存入数据库
    pst.setDouble(3, pay);
} catch (ParseException e) {
    // 处理无效输入,比如给用户提示
    JOptionPane.showMessageDialog(null, "请输入有效的付款金额格式:" + paymentStr);
    e.printStackTrace();
}

如果不确定具体地区,也可以尝试用默认系统Locale:NumberFormat.getInstance(),它会自动适配当前系统的数字格式。

方案2:直接替换逗号为句点(适合简单场景)

如果你能确定字符串里的逗号只是小数点,没有千分位分隔的情况(比如不会出现1,234.56这种格式),可以直接替换字符后解析:

String paymentStr = (String) jTable1.getValueAt(row, 2);
// 把逗号替换成英文句点
String normalizedStr = paymentStr.replace(',', '.');
try {
    double pay = Double.parseDouble(normalizedStr);
    pst.setDouble(3, pay);
} catch (NumberFormatException e) {
    JOptionPane.showMessageDialog(null, "无效的付款金额:" + paymentStr);
    e.printStackTrace();
}

⚠️ 注意:如果数据里有千分位逗号(比如1.234,56这种欧式千分位格式),直接替换会导致解析错误,这种情况一定要用方案1。

额外提醒

  • 之前用Float类型无效是因为同样的解析问题,不是MySQL字段类型的问题,只要解析出正确的数值,存入Double字段完全没问题。
  • 最好在数据输入阶段就做格式校验,避免用户输入不符合规范的数字,这样后续读取和存储会更顺畅。

内容的提问来源于stack exchange,提问作者Borislav Stefanov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:23:06