java - 插入...值...选择。如何使用 INSERT 进行嵌套语句?

标签 java mysql jdbc

请告诉我如何对数据库执行语句。 有 2 个表(很抱歉写错了 - 它只是提供有关列的信息):

  1. 承包商(contractor_id, contractor_name, contract_num)

  2. 发票(承包商 ID、发票编号、发票日期、发票金额)

“invoices”中的“contractor_id”是“contractors”中“contractor_id”的外键。如果我有来自“承包商”表的“承包商名称”,如何在“发票”表中插入以下数据:发票编号、发票日期、发票金额?

有效的解决方案是:

public void insertInvoiceDataByContractorName(String contractorsName, String invoiceNum, String date, float amount) {
        String contrId = null;
        try {
            preparedStatement = connection.prepareStatement("SELECT contractor_id FROM contractors WHERE contractor_name=?");
            preparedStatement.setString(1, contractorsName);
            resultSet = preparedStatement.executeQuery();
            while (resultSet.next()) {
                contrId = resultSet.getString(1);
            }
            preparedStatement = connection.prepareStatement("INSERT INTO invoices VALUES(?, ?, ? ,?)");
            preparedStatement.setString(1, contrId);
            preparedStatement.setString(2, invoiceNum);
            preparedStatement.setString(3, date);
            preparedStatement.setFloat(4, amount);
            preparedStatement.execute();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if (preparedStatement != null) {preparedStatement.close();}
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

我不知道如何通过仅使用一条语句来使它更正确和更简单。提前感谢您的建议。

最佳答案

使用

INSERT INTO invoices SELECT contractor_id, ?, ?, ?  FROM contractors WHERE contractor_name=?

假设您的承包商名称是唯一的,这将插入 1 行

关于java - 插入...值...选择。如何使用 INSERT 进行嵌套语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23636059/

相关文章:

java - 共享/类和war文件下的Java类-在tomcat中加载的优先级

java - Spring MVC 的 DelegatingFilterProxy 有什么意义?

mysql - 在一个表上添加多个索引对插入有害吗?

mysql - 临时表不存在,未按预期创建?数据库管理系统

java - 当 "streaming"是 ResultSet 时,MySQL Connector/J 是否缓冲行?

java - 查找表 2 中与表 1 中的每个位置最接近的位置

java - java泛型中奇怪的类型错误

java - @Category 注释中的不止一种类型

php - MySQL 默认值未按预期工作

mysql - 如何在mysql中对前一行进行求和