我正在尝试实现某种交易,但一直失败。
这是我的代码:
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/