В настоящее время я использую базу данных " PostgreSQL 9.0.4 " с драйвером JDBC: " postgresql-9.0-801.jdbc4.jar ".
У меня есть следующий JDBC SQL, использующий предложение " SELECT ... FOR UPDATE OF ... ", которое извлекает значение столбца (long) и обновляет значение путем увеличения в той же транзакции.
Мне нужно вернуть длинное значение , поэтому мне нужно использовать SELECT Sql.
final PreparedStatement preparedStatement = _connection.prepareStatement(
"select value from sequence where table_name='JOB' for update of value",
ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
long ret;
try {
final ResultSet resultSet = preparedStatement.executeQuery();
resultSet.next();
ret = resultSet.getLong(1);
resultSet.updateLong(1, ret + 1);
resultSet.updateRow();
} catch (SQLException ex) {
ex.printStackTrace();
}
finally {
resultSet.close();
preparedStatement.close();
}
return ret;
Все остальные базы данных, например MySQL, Oracle, MS-SQL, Derby прекрасно работают с таким SQL, но PostgreSQL всегда выдает следующее исключение.
org.postgresql.util.PSQLException: ERROR: relation "value" in FOR UPDATE/SHARE clause not found in FROM clause
Position: 68
У меня действительно есть таблица " sequence " с правильно созданным столбцом " value " - так что это не может быть печально известной проблемой чувствительности к регистру.
Означает ли это, что Postgres не поддерживает "SELECT ... FOR UPDATE OF .." Синтаксис SQL?
В таком случае, каков будет наилучший способ достижения того же эффекта (т. е. выбрать и обновить с помощью той же транзакции)?
Заранее большое спасибо,