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
相关产品推荐
相关产品推荐

