Если у вас есть List<Question>
и вы хотите вставить все за один раз, тогда вам нужно использовать то, что называется - пакетное или пакетное обновление.См. здесь для получения более подробной информации.
. Вы будете перебирать свой список вопросов и устанавливать параметры для каждого вопроса, затем добавлять этот оператор в пакет (с помощью st.addBatch ()) и затем, наконец, вызывать- st.executeBatch()
.
В вашем примере кода вы выполняете пакет, но в этом пакете есть только один подготовленный оператор.Вам нужно столько подготовленных утверждений, сколько вопросов в списке.
String req = "insert into question(title, content, id_examen) values(?,?,?)";
PreparedStatement st = cnx.prepareStatement(req, Statement.RETURN_GENERATED_KEYS);
for(Question question : ques){
st.setString(1, question.getTitre());
st.setString(2, question.getContenu());
st.setInt(3, question.getIdExamen());
st.addBatch();
}
st.executeBatch();
При таком подходе у вас могут возникнуть проблемы со сбором сгенерированных ключей, как показано в этом вопросе SO , так что если выэти идентификаторы действительно нужны, вам придется отключить автоматическую фиксацию, выполнять обновления в цикле без пакетной обработки, собирать сгенерированные идентификаторы в карте или списке для каждого оператора вставки и, наконец, в конце зафиксировать ваше соединение.