【问题标题】:SQLite database refuses to update and I'm not sure whySQLite 数据库拒绝更新,我不知道为什么
【发布时间】:2021-11-09 03:45:57
【问题描述】:

我正在使用这两种方法来更新我正在编写的银行应用程序的余额,但数据库拒绝更新,我不知道为什么。

获取添加多少的函数:

public void addIncome(String cardNum,Scanner scanner){
    System.out.println("Enter income: ");
    int income = scanner.nextInt();
    scanner.nextLine();
    dataBase.addBalance(income,cardNum);
}

为查询准备的语句和函数:

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();
         final var sql = con.prepareStatement(ADD_BALANCE)){
           sql.setInt(1, amount);
           sql.setString(2,number);
           sql.executeUpdate();
       }catch (SQLException throwables) {
           throwables.printStackTrace();
       }
}

【问题讨论】:

  • 如果getConnection 返回一个面向事务的连接,那么你需要在更新后提交。但是如果启用了自动提交,那么问题就出在其他地方。这样做:(a)离开try前检查余额,然后从addBalance返回后再次检查余额,然后你就会知道了。

标签: java sqlite jdbc sql-update


【解决方案1】:

您错过了对commit 的调用,这意味着当连接关闭时事务将隐式回滚(在try 结束时)。

try (Connection con = this.dataSource.getConnection();
     final var sql = con.prepareStatement(ADD_BALANCE)) {
    sql.setInt(1, amount);
    sql.setString(2, number);
    sql.executeUpdate();
    con.commit(); // HERE
}

【讨论】:

  • 默认情况下,数据源需要返回一个处于自动提交模式的连接。
猜你喜欢
  • 2021-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-04
  • 2012-09-28
  • 2023-03-07
相关资源
最近更新 更多