このメソッドは正常に動作していないと思われることを除いてはうまく動作します。私は2つのテーブルを持っています同じtry-with-resourcesブロック内で2つのprepared statementを使用してもかまいません。
一つの科目は多く学年です。
一つの学年は多く被験者
件名を
code PK
creator
dateCreated
description
name
units
yearLevel
SchoolYearSubjectsている(対象は多くを持つことができるか、異なる学年に所属することができます)
id PK
code FK
dateAdded
schoolyear
ここにその方法があります。
public Boolean add(){
Boolean success ;
String SQLa = "INSERT INTO subject(name,code,units,description,yearlevel,creator) "
+ "VALUES (?,?,?,?,?,?)";
String SQLb = "INSERT INTO schoolyearsubjects(code,schoolyear,addedBy) values(?,?,?)";
try(Connection con = DBUtil.getConnection(DBType.MYSQL);
PreparedStatement ps1 = con.prepareStatement(SQLa);
PreparedStatement ps2= con.prepareStatement(SQLb);){
//a.)Prepare ps1
ps1.setString(1,subjectName);
ps1.setString(2,subjectCode);
ps1.setInt(3, subjectUnits);
ps1.setString(4, subjectDescription);
ps1.setString(5, subjectYearLevel);
ps1.setString(6, Login.getUsername());
//b.)Prepare ps2
ps2.setString(1,subjectCode);
ps2.setString(2, schoolYearStart+"-"+schoolYearEnd);
ps2.setString(3, Login.getUsername());
//c.) execute both statements
ps1.executeUpdate();
ps2.executeUpdate();
success = true;
} catch (SQLException e) {
success = false;
JOptionPane.showMessageDialog(null,e.getClass()+" "+e.getMessage());
}
return success;
}
私は、1つの方法の中に2つの準備された声明を持つことに固執することに躊躇しています。
code
列がForeign Key
であり、両方が同じ関数内で実行されなければならないことを考慮して、BOTH文の実行を確実にするにはどうすればよいですか? また、追加するには、add()
メソッドは1つのボタンに限定されています。
私が間違っていることがあれば、私に助言してください。
ありがとうございました。
別々に障害を処理する以外の理由がない場合は、INSERT文を分割することを検討してくださいあなたの呼び出しコードで。現在のところ、単一のブール値がこれを伝えることができないため、あるエラーと別のエラーを区別するためにエラーコードを使用する必要があります。 –
2つのpreparedStatementの実行に間違いはありませんが、作成した 'PreparedStatement'と' Connection'オブジェクトを閉じることを忘れないでください。そうしないと、sqlErrorが発生します。 – viveksinghggits