如何在 PreparedStatement 中运行 SQL TRANSACTION

Was*_*eed 2 java sql jdbc

我有一个无法运行的 SQL 事务查询。谁能告诉我为什么?我也无法运行它preparedstament.executequery();

START TRANSACTION;
SELECT total_installment_remaining  FROM payment_loan WHERE loan_id = 1 FOR UPDATE;
UPDATE payment_loan SET total_installment_remaining =total_installment_remaining-1 WHERE loan_id = 1;
COMMIT;
Run Code Online (Sandbox Code Playgroud)

a_h*_*ame 6

关闭自动提交,然后用于Connection.commit()结束事务。

connection.setAutocommit(false);
Statement stmt = con2.createStatement();

// this will automatically start a transaction
ResultSet rs = stmt.executeQuery("SELECT total_installment_remaining  FROM payment_loan WHERE loan_id = 1 FOR UPDATE");

// process the result if needed
...

stmt.executeUpdate("UPDATE payment_loan SET total_installment_remaining =total_installment_remaining-1 WHERE loan_id = 1");

// end the transaction and persist then changes
connection.commit();
Run Code Online (Sandbox Code Playgroud)

如果您的代码中不需要 SELECT 的结果,那么您根本就不需要SELECT ... FOR UPDATE,因为UPDATE无论如何都会锁定行。