Java JDBC 在插入后检索 ID

标签 java jdbc insert

我使用触发器来设置所有表的 PK 列值,因此我不对 Java 中的 ID 进行任何操作,但我在插入后需要 ID。

如何获得身份证件?

stat.execute("INSERT INTO TPROJECT_PROCESS_GROUP(NPROJECT_ID,VDESCRIPTION) " +
                "VALUES(" +
                "'" + projectID + "'," +
                "'" + description + "'" +
                "");

编辑:你好,我又读了这个问题,现在我得到一个异常,比如“不受支持的操作”(我从我的母语翻译过来,确切的英文形式可能不同)。我想这是关于 oracle 对 GetGeneratedKeys 的支持?你知道这件事吗?

解决方法:如一本关于callablestatements的书上提到的,这条语句可以用来执行存储过程和函数。与 PreparedStatement 不同,大多数数据库不为调用做任何准备,因为它是一个如此简单的命令。 CallableStatement 实例可用于返回存储过程(或函数,更准确地说)返回的对象。

OracleConnection conn = null;
    //OraclePreparedStatement pstat = null;
    OracleCallableStatement cstat = null;
    String sql = "BEGIN INSERT INTO TPROJECT P (VPROJECT_TITLE,VPROJECT_DESC)    VALUES(?,?) RETURNING P.NPROJECT_ID INTO ?;  END;";
    try {
        conn = ConnectionUtility.GetConnection();
        cstat = (OracleCallableStatement)conn.prepareCall(sql);

        cstat.setString(1, title);
        cstat.setString(2, description);
        cstat.registerOutParameter(3, OracleTypes.NUMBER);
        cstat.execute();

        int returnedID = cstat.getInt(3);
//          System.out.println(returnedID);

        conn.close();

        return returnedID;

最佳答案

此示例是您在 PostgreSQL 中的操作方式。希望您可以在 Oracle 中做类似的事情。

这是在 INSERT INTO 之后为自动生成的 key (如 serial )获取 ID 的方式。重要的是在 prepareStatement() 调用中提供 RETURN_GENERATED_KEYS

Resultset result;
PreparedStatement prep;
String query = "INSERT INTO myRel (data) VALUES (?)";

prep = db.prepareStatement(query ,Statement.RETURN_GENERATED_KEYS);

result = prep.getGeneratedKeys();

if(result.next() && result != null){
   System.out.println("Key: " + result.getInt(1));
} else {
   System.out.println("No, Nop nada");
}

希望对某人有所帮助:)

关于Java JDBC 在插入后检索 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3452209/

相关文章:

java - 在 Mac OS X 上配置 JNotify

java - 将日期对象存储在sqlite数据库中

python - 类型错误 : 'float' object is not subscriptable

php - 当用户点击链接时插入 click_url、时间戳和用户名

java - 这种多态性有特殊的名称吗? (一个类实现两个或多个接口(interface))

java - RabbitMQ 没有选择正确的消费者

Hibernate 用于存储过程访问

java - 如何更新 JTable View

php - mysql_insert_id() 0,但插入成功

java - JSONP 与 Jersey