编辑:链接的答案不使用LAST_INSERT_ID
,仍在寻找答案。
我正在使用JBoss并通过DataSource(JNDI)获取连接。
如何一次性链接和执行多个SQL语句,其中第二个语句取决于第一个语句的输出(LAST_INSERT_ID()
)
preparedStatement = connection.prepareStatement("INSERT INTO product(name) VALUES(?); INSERT INTO brand_product(brand_id, product_id) VALUES(?, LAST_INSERT_ID())", Statement.RETURN_GENERATED_KEYS);
preparedStatement.setString(1, name);
preparedStatement.setInt(2, brandId);
if(preparedStatement.executeUpdate() != 0) {
try (ResultSet generatedKeys = preparedStatement.getGeneratedKeys()) {
if(generatedKeys.next()) {
product = new Product(generatedKeys.getInt(1), name);
}
}
};
请注意:我也使用了密钥,第二个表没有生成任何密钥,因为它是一个连接表。
答案 0 :(得分:1)
配置JBoss以允许管理界面中的多个查询。在添加属性之前单击禁用。 (在DataSources下)。
propertyName:allowMultiQueries
属性值:true
生成的密钥不会出现问题,因为第二个查询没有自动增加主键。