我目前正在使用带有JDBC驱动程序的" PostgreSQL 9.0.4 "数据库:" postgresql-9.0-801.jdbc4.jar ".
我有以下JDBC SQL使用" SELECT ... FOR UPDATE OF ... "子句检索列值(long)并通过在同一事务中递增来更新值.
我需要返回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;
Run Code Online (Sandbox Code Playgroud)
所有其他数据库,例如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
Run Code Online (Sandbox Code Playgroud)
我确实有正确创建" 值 "列的表" 序列 " - 所以这可能不是臭名昭着的区分大小写问题.
这是否意味着Postgres不支持"SELECT ... FOR UPDATE OF .." SQL语法?
在这种情况下,实现相同效果的最佳方式是什么(即使用相同的事务选择和更新)?
提前谢谢了,
是.它受到支持.但语法是
FOR UPDATE [ OF table_name [, ...] ] [ NOWAIT ]
你可以在这里看到更多:
http://www.postgresql.org/docs/8.2/static/sql-select.html#SQL-FOR-UPDATE-SHARE
| 归档时间: |
|
| 查看次数: |
9694 次 |
| 最近记录: |