SELCT ... FOR UPDATE
hanya masuk akal dalam konteks transaksi terkelola, karena membutuhkan kunci untuk diambil pada baris yang dipilih.
Secara default, JDBC tidak menggunakan transaksi terkelola, ia menggunakan transaksi yang dibuat secara implisit yang dilakukan segera setelah kueri dieksekusi. Ini akan merusak semantik SELECT ... FOR UPDATE
, dan pengemudi JDBC mengeluh.
Untuk menggunakan transaksi terkelola, tambahkan
connection.setAutoCommit(false);
sebelum Anda menjalankan kueri. Setelah itu, jalankan connection.commit()
.