我需要从我的外键中插入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();
答案 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()+"')");)");
当然,这不会按原样工作(我太懒了,无法检查引号/括号匹配),但应该给你一般的想法。