SELCT ... FOR UPDATE
имеет смысл только в контексте управляемой транзакции, поскольку она требует снятия блокировок на выбранных строках.
По умолчанию JDBC не использует управляемую транзакцию, она используетнеявно созданный, который фиксируется, как только запрос выполняется.Это нарушит семантику SELECT ... FOR UPDATE
, и драйвер JDBC пожалуется.
Чтобы использовать управляемую транзакцию, добавьте
connection.setAutoCommit(false);
перед выполнением запроса.Затем выполните connection.commit()
.