gpt4 book ai didi

Java JDBC 主键 Oracle 数据库

转载 作者:行者123 更新时间:2023-12-02 05:45:13 25 4
gpt4 key购买 nike

我正在使用 Java 开发一个应用程序,并且我有一个 Oracle 数据库。为了存储数据,我使用 JDBC。在 Oracle 数据库中,没有什么比自动增量更好的了。所以我使用触发器来获取最新的主键。

目前该应用程序已经实现,并且我取回了保存的主键。当设置connection.setAutoCommit(true) 时会发生这种情况。我想知道如果我设置connection.setAutoCommit(false)是否可以获得主键?

我问这个问题的原因是因为我面临着多个线程的并发问题,其中一个线程保存数据,另一个线程可以获取保存的记录。我不希望这种事发生。我希望在其他线程查看数据之前顺序完成代码。因此,我尝试研究 JDBC 行锁,但不存在这样的情况。

同一线程内另一个方法的输入需要此主键。

最佳答案

检索主键的正确方法是使用 getGeneratedKeys设施(可以通过使用 Statement.RETURN_GENERATED_KEYS 值和 Statement.execute*Connection.prepareStatement 方法之一来激活。

在大多数数据库中,这可用于直接检索主键。然而,对于 Oracle,这将允许您获得 ROWID ,这个ROWID可用于查询表中插入的行并获取主键。

例如:

stmt.executeUpdate("INSERT INTO theTable(column1) VALUES ('a')",
Statement.RETURN_GENERATED_KEYS);
ResultSet keys = stmt.getGeneratedKeys();
int primaryKey = -1;
if (keys.next()) {
try (PreparedStatement keyStatement =
connection.prepareStatement("SELECT ID FROM theTable WHERE ROWID = ?")) {
keyStatement.setRowId(keys.getRowId(1));
try (ResultSet rs = keyStatement.executeQuery()) {
primaryKey = rs.getInt(1);
}
}
}

关于Java JDBC 主键 Oracle 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24136223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com