【发布时间】:2019-03-25 03:56:21
【问题描述】:
通过我的 OrderDAO 对象将订单插入 HSQL 数据库后,我希望能够检索在插入时分配给订单的序列号。
我有这个给我的PreparedStatement:
public long saveOrder(Order order) {
long orderId = 0;
try (Connection conn = MyDataSource.getDataSource().getConnection();
PreparedStatement ps = conn.prepareStatement("INSERT INTO orders(id, order_number) VALUES (NEXT VALUE FOR seq1, ?)",
PreparedStatement.RETURN_GENERATED_KEYS)) {
ps.setString(1, order.getOrderNumber());
ps.execute();
ResultSet rs = ps.getResultSet();
if (rs.next()) {
orderId = rs.getLong(1);
}
} catch (Exception e) {
throw new RuntimeException(e);
}
return orderId;
}
我会假设,在执行查询并询问其结果集之后,结果集中的第一列将是序列号。但我似乎不是那样工作的。
我哪里错了?
【问题讨论】:
-
向我们展示您尝试过的代码,同时请告诉我们您正在使用哪个数据库和驱动程序。并非所有数据库都支持生成的密钥,并且并非所有数据库都以相同的方式支持它。
-
添加了代码。我正在使用内存中的 hsqldb。
-
执行第一个查询以从序列中获取下一个值,然后将结果用作第二个查询的参数。