JBoss下的链式MySQL语句

时间:2017-02-28 18:59:06

标签: java mysql jdbc jboss jndi

编辑:链接的答案不使用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);
        }
    }
};

请注意:我也使用了密钥,第二个表没有生成任何密钥,因为它是一个连接表。

1 个答案:

答案 0 :(得分:1)

  1. 配置JBoss以允许管理界面中的多个查询。在添加属性之前单击禁用。 (在DataSources下)。

    propertyName:allowMultiQueries属性值:true

  2. 生成的密钥不会出现问题,因为第二个查询没有自动增加主键。