java 在PostgreSQL中返回事务中SELECT语句的结果

0pizxfdo  于 2022-12-28  发布在  Java
关注(0)|答案(1)|浏览(111)

我想这样做:

BEGIN;
LOCK TABLE MY_TABLE IN ACCESS SHARE MODE NOWAIT;
SELECT * from MY_TABLE;
COMMIT TRANSACTION;

但是这个查询在JDBC中从预准备语句执行查询后返回了一个空的结果集,是否可以在事务中 Package SELECT语句?或者我应该完全改变方法吗?
基本上,我需要它的行为与select完全相同(性能方面也是如此),但如果表上有一个排它锁,则会失败。
编辑:
一些背景:Fail SELECT Query if table is locked in PostgreSQL(父问题)
Java代码:
x一个一个一个一个x一个一个二个x

sd2nnvve

sd2nnvve1#

为了澄清我在评论中所说的,我将使用JDBC来控制事务。

private static final String LOCKSQL = "LOCK TABLE PING_TASK IN ACCESS SHARE MODE NOWAIT";

@Override
public PreparedStatement prepareSelectStatementLockNowait(String sql)
            throws SQLException {
    this.connectionCache.setAutoCommit(false);
    try (PreparedStatement ps1 = this.connectionCache.prepareStatement(LOCKSQL)) {
        ps1.execute();
    }
    return this.connectionCache.prepareStatement(sql);
}

然后您可以使用

ResultSet rs = sm.executeQuery();
while (rs.next()) {
    // ...
}
conn.commit(); // commit the transaction

相关问题