插入后的Java JDBC检索ID

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

我怎样才能获得身份证?

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

编辑:嗨再次我读了这个问题,现在我得到了一个例外,比如’不支持的操作’(我翻译自我的母语,确切的英文forms可能会有所不同)。 我想这是关于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之后为自动生成的密钥(如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"); } 

希望有人帮助:)