I created this code for adding data for 3 tables. But I got an error, lock wait time out exceeded. In my database, I'm adding values for takerslist, q_enrolls and test tables. I'm getting some data from qBank and question tables. takerlist foreign key is stdId. I think it's not important here. q_enroll's foreign keys are qId(References question table), qBankId(references QBank) and testId(references test).
@Override
public int add(Test e, Connection connection) throws SQLException, ClassNotFoundException, RemoteException {
String query = "INSERT INTO Test VALUES(?,?,?,?,?,?,?)";
Object[] data = {e.getTestId(), e.getTestName(), e.getTestFrom(), e.getTestTo(), e.getTotalQuestions(), e.getTestDate(), e.getPassMark()};
try {
connection.setAutoCommit(false);
int res = DBHandle.setData(connection, query, data);
if (res > 0) {
List<TakerList> list = e.getListTakers();
TakerListManagementModel takerListModel = new TakerListManagementModel();
QuestionEnrollManagementModel enrollModel = new QuestionEnrollManagementModel();
takerListModel.setAddCommonBehavior(true);
enrollModel.setAddCommonBehavior(true);
List<List<BankQuestion>> selQs = null;
String testId = null;
for (TakerList tl : list) {
int resTakers = takerListModel.performAdd(tl);
if (resTakers > 0) {
selQs = e.getListQBanks();
testId = tl.getTestId();
} else {
connection.rollback();
return 0;
}
}
for (List<BankQuestion> list1 : selQs) {
for (BankQuestion bankQuestion : list1) {
QuestionEnroll enroll = new QuestionEnroll(bankQuestion.getqId(), testId, bankQuestion.getqBankId());
int resQList = enrollModel.performAdd(enroll);
if (resQList==0) {
return 0;
}
}
}
connection.commit();
return 1;
} else {
connection.rollback();
return 0;
}
} catch (SQLException ex) {
connection.rollback();
throw ex;
} finally {
connection.setAutoCommit(true);
}
}