我使用触发器来设置所有表的 PK 列值,因此我不会对 java 中的 ID 进行任何操作,但我需要插入后的 ID。
我怎样才能拿到身份证?
stat.execute("INSERT INTO TPROJECT_PROCESS_GROUP(NPROJECT_ID,VDESCRIPTION) " +
"VALUES(" +
"'" + projectID + "'," +
"'" + description + "'" +
"");
编辑:嗨,我再次阅读了这个问题,现在我收到一个异常,例如“不受支持的操作”(我从我的母语翻译过来,确切的英文形式可能有所不同)。我想这是关于oracle对GetGenerateKeys的支持?你知道这件事吗?
解决方案:正如一本关于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 中做类似的事情。
这就是你获取 id 之后的方式插入对于自动生成的密钥,例如序列。这里重要的是提供RETURN_GENERATED_KEYS在prepareStatement() 调用中。
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");
}
希望对某人有帮助:)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)