java - JBoss下链式MySQL语句

标签 java mysql jdbc jboss jndi

编辑:链接的答案不使用 LAST_INSERT_ID,仍在寻找答案。

我正在使用 JBoss 并通过数据源 (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. 配置 JBoss 以允许在管理界面中进行多个查询。在添加属性之前先单击禁用。 (在数据源下)。

    属性名称:allowMultiQueries 属性值:true

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

关于java - JBoss下链式MySQL语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42516694/

相关文章:

php - 获取在 phpmyadmin 上工作的 Microsoft Server 2008 sql 查询

c# - 嵌套的 TransactionScope 在测试中失败

javascript - Google Apps 将 JDBC 结果集脚本化为数组

java - Hibernate + Informix + Blob + 字节数组

Java运行时执行

java - 将文本写入 Accumulo 时尾随空 (\x00) 字符

php - 如果 UNIX_TIMESTAMP 在 SQL 查询中更小?

java - 如何在不同计算机上且不在同一 WiFi 上的两个 Java 应用程序之间进行通信

java - 从 JDBC 检索值并使用 JSTL 标记调用方法

mysql - 无法从数据源获取 JDBC 连接