我在 JEE 中工作,使用 WebLogic 和 OracleXE 作为数据库引擎,我使用的是 DataSource(不是 JPA),在这个数据库中必须创建序列以生成自动增量值,我已经这样做了,当我这样做时它对我来说很好我执行,因为它还创建了一个触发器来自动生成值,尽管那是另一个话题。
从我的应用程序中,我可以将数据插入数据库,但我需要获取我在上一段中提到的那个 ID 的值。
我已经执行了这个从互联网上获取的示例,它对我不起作用,它甚至没有插入值:
插入订单(CustomerID、EmployeeID、OrderDate....)值(1、1...)返回 OrderID 到:last_insert_id
还有其他建议吗?
这里有一点代码
> PreparedStatement sttmt = conn.prepareStatement("INSERT INTO fabricantes (NOMBRE, PAIS) VALUES (?,?)", Statement.RETURN_GENERATED_KEYS);
String nombre = "Colo Colo";
String pais = "Chile";
sttmt.setString(1, nombre);
sttmt.setString(2, pais);
int resultado = sttmt.executeUpdate();
// ResultSet rs = sttmt.getGeneratedKeys();
Long id = null;
ResultSet rs = sttmt.getGeneratedKeys();
if (rs.next()) {
id = rs.getLong(1);
// Long id = generatedKeys.getLong(1);
}
return id;
该表还有一个COD_FABRICANTE
嵌入代码中看不到的数据,因为它是自动生成的,它是我想要精确获取的主键。的值COD_FABRICANTE
是通过我创建的序列自动增量生成的,在 Oracle 11g 数据库中没有其他数据库中的值IDENTITY
或值。SERIAL
由于 WebLogic Server 的限制,我使用的是 JDK 6,该平台不支持更高的 JDK。
应该正确工作的一种方法是将语句包围
INSERT
起来BEGIN ... END;
,使其成为 PL/SQL 块。这应该允许使用该子句RETURNING
。然后你使用 a
CallableStatement
能够注册一个输出参数。代码示例:
jdbc
有一个insert
没有returning
: