java - 数据库中最后插入行的值

标签 java database oracle jdbc

<分区>

有什么方法可以从最后插入的行中获取值吗?

我正在插入一行,其中 PK 将由于创建的序列而自动增加,我想获得这个序列号。只保证PK在表中唯一。

我将 Java 与 JDBC 和 Oracle 一起使用。

我忘了补充一点,我想使用下面的结果集检索这个值。 (我已经用 mysql 试过了,它成功地工作了,但我不得不切换到 Oracle,现在我得到了 ID 的字符串表示,而不是实际的序列号)

Statement stmt = conn.createStatement();
stmt.executeUpdate(insertCmd, Statement.RETURN_GENERATED_KEYS);
stmt.RETURN_GENERATED_KEYS;
ResultSet rs = stmt.getGeneratedKeys();
if(rs.next()){
   log.info("Successful insert");
   id = rs.getString(1);
}

上面的代码片段将返回存储在 mysql 表中的列 int 值。但是自从我切换到 Oracle 后,返回的值现在是一个奇怪的字符串值。

最佳答案

您要做的是利用 RETURNING 子句。让我们设置一个示例表和序列:

CREATE TABLE "TEST" 
( "ID" NUMBER NOT NULL ENABLE, 
 "NAME" VARCHAR2(100 CHAR) NOT NULL ENABLE, 
  CONSTRAINT "PK_TEST" PRIMARY KEY ("ID")
  );

CREATE SEQUENCE SEQ_TEST;

现在,您的 Java 代码应如下所示:

String insertSql = "BEGIN INSERT INTO TEST (ID, NAME) VALUES (SEQ_TEST.NEXTVAL(), ?) RETURNING ID INTO ?; END;";
java.sql.CallableStatement stmt = conn.prepareCall(insertSql);
stmt.setString(1, "John Smith");
stmt.registerOutParameter(2, java.sql.Types.VARCHAR);
stmt.execute();
int id = stmt.getInt(2);

关于java - 数据库中最后插入行的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1976625/

相关文章:

java - Maven 复制依赖项不起作用

c# - 用于许多并发客户端和数据库访问的 WCF 服务

python - 如何将 Celery worker 连接到 Django 测试数据库

sql - 从两个表更新时使用case when语句

java - 在 Java 中分配大量相对较小的对象

实现 Serializable 接口(interface)的 Java 类

java - ApplicationEventMulticaster 未初始化 - 在通过上下文多播事件之前调用 'refresh'

php - 外键可以为空或留空吗?

mysql - 如果我们需要在jsp中查询一个id数组,如何查询数据库?

c++ - Oracle OCI 获取最后插入行的 ID