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

SQLite数据库无法执行更新操作,银行应用余额更新功能异常

账户余额更新失败故障排查与修复方案
  • 检查事务提交配置:SQLite连接默认可能未开启自动事务提交,当前代码执行更新后未显式提交事务,操作会被静默回滚。可先打印连接的自动提交状态con.getAutoCommit(),若为false,需在executeUpdate()执行后补充con.commit()语句。
  • 校验参数匹配性:确认card表number字段为字符串类型,传入的cardNum参数与库中存储的卡号完全一致(无多余空格、大小写差异),可在执行更新前打印amount、number两个入参的实际值,确认参数传递无异常。
  • 验证更新匹配行数:executeUpdate()方法会返回本次SQL执行影响的行数,接收该值打印即可判断是否命中更新条件:若返回0说明无匹配的卡号记录,问题出在WHERE条件而非更新逻辑本身。参考代码:
int affectedRows = sql.executeUpdate();
System.out.println("更新影响行数:" + affectedRows);
  • 检查字段与权限配置:确认balance字段为数值类型(INTEGER/REAL),若为字符串类型执行加法操作会失败;同时确认运行程序的用户对SQLite数据库文件、所在目录有读写权限。

修复后参考代码

// 预编译更新语句保持不变
private final String ADD_BALANCE = "UPDATE card SET balance=balance+? WHERE number=?";

public void addBalance(int amount, String number){
       try (Connection con = this.dataSource.getConnection();
         PreparedStatement sql = con.prepareStatement(ADD_BALANCE)){
           sql.setInt(1, amount);
           sql.setString(2,number);
           int affectedRows = sql.executeUpdate();
           // 非自动提交场景手动提交事务
           if (!con.getAutoCommit()) {
               con.commit();
           }
           // 可按需开启日志排查问题
           // System.out.printf("卡号%s更新完成,影响行数%d%n", number, affectedRows);
       }catch (SQLException throwables) {
           throwables.printStackTrace();
       }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:21:01