У меня есть три метода, которые вместе сохраняют узел в базе данных. В настоящее время это не приводит к желаемому эффекту не фиксации изменений, если не все записи успешны.
conn.setAutoCommit(false);
writeNodeTable(node, newNodeNID);
writeContentTypeBoutTable(node, newNodeNID);
writeTerms(node, newNodeNID);
conn.commit();
Если во втором или третьем методе возникает проблема (например, возникает необработанное исключение), я бы хотел откатить все изменения. Есть ли способ использовать транзакции для этого?
Это одна из таких функций записи в БД:
private void writeTerms(DrupalNode node, int newNodeNID) throws SQLException {
String sql = "INSERT INTO term_node (nid, vid, tid) VALUES (?, ?, ?)";
PreparedStatement prep = conn.prepareStatement(sql);
prep.setInt(1, newNodeNID);
prep.setInt(2, newNodeNID);
String schoolName = termHelp.schoolOfAgainst(node.get(BoutField.against));
prep.setString(3, schoolName);
prep.execute();
String fencerName = termHelp.fencerOfAgainst(node.get(BoutField.against));
prep.setString(3, fencerName);
prep.execute();
prep.close();
}