使用java和数据库将值插入外键

时间:2015-08-20 16:48:10

标签: java mysql database

我需要从我的外键中插入FK ID的一些解决方案,当我插入ID时问题就出现了,而且它将首先插入Payment_ID,第二个默认为null值,在下一列上它将设置为插入,另一个在这里为空,我的代码

pStmt2 = conn.prepareStatement("insert into Audittrail_tbl (Customer_ID) values ((Select Name_ID from Customer_tbl where FName ='"+txtFName.getText()+"' and LName = '"+txtLName.getText()+"'))");
    pStmt2 = conn.prepareStatement("insert into Audittrail_tbl (Payment) values ('"+txtPayment.getText()+"')");
    pStmt2.executeUpdate();

2 个答案:

答案 0 :(得分:1)

您的代码应为:

String sql = "insert into Audittrail_tbl (Customer_ID, Payment)" +
            " select Name_ID, ?" +
              " from Customer_tbl" +
             " where FName = ?" +
               " and LName = ?";
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
    stmt.setString(1, txtPayment.getText());
    stmt.setString(2, txtFName.getText());
    stmt.setString(3, txtLName.getText());
    stmt.executeUpdate();
}

或者更好的是,如果Payment是金额列:

// Using BigDecimal
stmt.setBigDecimal(1, new BigDecimal(txtPayment.getText()));

// Using Double
stmt.setDouble(1, Double.parseDouble(txtPayment.getText()));

因为这会将文本解析为Java代码中的数字,您可以更好地处理解析错误。

注意:如果需要,使用insert-from-select而不是带子查询的insert-values,将允许您从Customer_tbl中选择多个列。

答案 1 :(得分:0)

您正在进行两次插入,这会创建两条记录。如果要更新第一个查询创建的记录,则需要UPDATE代替第二个查询。

为什么要使用两个查询?为什么不

pStmt2 = conn.prepareStatement("
    insert into Audittrail_tbl (Customer_ID, Payment)
    values (
        (Select Name_ID from Customer_tbl where FName ='"+txtFName.getText()+"' and LName = '"+txtLName.getText()+"'),
        '"+txtPayment.getText()+"')");)");

当然,这不会按原样工作(我太懒了,无法检查引号/括号匹配),但应该给你一般的想法。