Connection的方法实现事务的控制:
- 关闭自动提交:setAutoCommit(false)
- 回滚状态:rollback()
- 手动提交:commit
/**
* 产看库存,
*
* @param goods
* @param userid
* @param accounts
* @return
*/
public String reduceGoods(List<GoodsCarPo> goods, String userid, String accounts) {
String result = "false";
Connection con = C3P0.connection();
String sql = "{call reduceGoods(?,?,?)}";
CallableStatement prs = null;
try {
/*关闭自动提交*/
con.setAutoCommit(false);
for (int i = 0; i < goods.size(); i++) {
prs = con.prepareCall(sql);
prs.setString(1, goods.get(i).getGoodsid());
prs.setString(2, goods.get(i).getGoodsnumber());
prs.registerOutParameter(3, java.sql.Types.INTEGER);
prs.execute();
if (prs.getInt(3) == 1) {
/*返回值为1,回滚状态*/
con.rollback();
return goods.get(i).getGoodsname() + "无货";
}
}
if (account(userid, accounts).equals("true")) {
/*手动提交数据*/
con.commit();
}
return account(userid, accounts);
} catch (SQLException e) {
e.printStackTrace();
} finally {
C3P0.close(prs, con);
}
return result;
}