java - Java 中的 MySQL 事务

标签 java mysql database transactions

我正在尝试实现某种交易,但一直失败。

这是我的代码:

PreparedStatement ac = con.prepareStatement("UPDATE Stock "
        + "SET Stock= Stock - ('"+stockinput+"')"
        + "WHERE StockID =('"+stockID+"')");
ac.executeUpdate();
PreparedStatement dc = con.prepareStatement("SELECT StockAmount FROM Stock");
ResultSet results = dc.executeQuery();
while(results.next()){
    int temp = Integer.parseInt(results.getString("StockAmount"));
    if(stockinput < temp ){
        con.rollback();
    }
    else{
        con.commit();
    }
}

但是,它不会回滚。

花了近一个小时试图找到解决办法。

如果有人能帮助我,我将非常感激。

最佳答案

你忘记了第一行。

我建议您需要了解更多有关 JDBC 的知识。谁会愚蠢地使用PreparedStatement而不使用绑定(bind)变量?

无论如何,我不喜欢这种逻辑。如果库存量不应该为负数,我会将其添加为数据库中的约束。为什么在完成更新后还要进行检查?之前检查一下。这段代码没有什么意义。

// i don't see this in your code.
con.setAutoCommit(false);
PreparedStatement ac = con.prepareStatement("UPDATE Stock "
        + "SET Stock= Stock - ('"+stockinput+"')"
        + "WHERE StockID =('"+stockID+"')");
ac.executeUpdate();
PreparedStatement dc = con.prepareStatement("SELECT StockAmount FROM Stock");
ResultSet results = dc.executeQuery();
while(results.next()){
    int temp = Integer.parseInt(results.getString("StockAmount"));
    if(stockinput < temp ){
        con.rollback();
    }
    else{
        con.commit();
    }
}

关于java - Java 中的 MySQL 事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17333168/

相关文章:

java - 如何在成功验证后使用 Microsoft OAuth 获取用户信息

php - Azure网站+mysql

database - 用于审查评级和可选项目的架构设计

database - 键/值数据库的二级索引

Android SQLite 获取 CursorIndexOutOfBoundsException

java - 在 Android 中使用 MultipartEntityBuilder 时 HttpPost 返回错误

java - ClassCastException 从数据库中的组合框中插入数据

mysql - 类似 Stackoverflow 的评论数据库模式

mysql - 带 3 个表的数据透视表

java - 欧氏除法中的位补运算符