Java Loop-Based Transaction Commit

What is Loop-Based Transaction Commit?

Loop-based transaction commit is a robust pattern for managing database transactions across repeated, similar operations. It disables automatic transaction committing, executes a sequence of database actions in a loop, validates each operation's outcome, commits only when validation passes, and rolls back entirely if any step fails. This pattern guarantees that no partial writes are persisted to the database, preserving full data consistency even when handling multiple sequential data base tasks.

Code Implemantation Example

Below is a refined Java code example demonstrating loop-based transaction commit with proper parameterization and resource handling:

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class TransactionLoopDemo {
    public static void executeTransactionalLoop(Connection dbConnection) throws SQLException {
        try {
            // Disable auto-commit to enable manual transaction control
            dbConnection.setAutoCommit(false);

            // Use try-with-resources for JDBC resources to auto-close them
            try (PreparedStatement insertProfile = dbConnection.prepareStatement(
                "INSERT INTO user_profiles (display_name, email) VALUES (?, ?)"
            );
                PreparedStatement countRecords = dbConnection.prepareStatement(
                    "SELECT COUNT(*) AS total FROM user_profiles"
                )) {

                for (int loopIndex = 0; loopIndex < 5; loopIndex++) {
                    // Bind dynamic values to the insert query
                    insertProfile.setString(1, "demo_user_" + loopIndex);
                    insertProfile.setString(2, "demo_" + loopIndex + "@example.org");
                    insertProfile.executeUpdate();

                    // Verify the total number of records matches expected count
                    try (ResultSet countResult = countRecords.executeQuery()) {
                        countResult.next();
                        int currentRecordCount = countResult.getInt("total");

                        if (currentRecordCount != loopIndex + 1) {
                            dbConnection.rollback();
                            break;
                        }
                    }

                    // Commit the successful iteration's transaction
                    dbConnection.commit();
                }

                // Restore automatic commit mode after processing
                dbConnection.setAutoCommit(true);
            }
        } catch (SQLException sqlError) {
            sqlError.printStackTrace();
            // Roll back all pending transactions on failure
            if (dbConnection != null) {
                dbConnection.rollback();
            }
        }
    }
}

Transaction State Flow

The following Mermaid state diagram illustrates the state transitions for loop-based transaction commit:

stateDiagram-v2
    [*] --> TransactionActive: Initialize Batch
    TransactionActive --> RunOperation: Start Loop Iteration
    RunOperation --> ValidateResult: Operation Executed
    ValidateResult --> CommitTx: Validation Passed
    ValidateResult --> RollbackTx: Validation/Failure
    CommitTx --> NextIteration: Continue Batch
    NextIteration --> RunOperation: More Iterations Left
    NextIteration --> [*]: Batch Completed
    RollbackTx --> [*]: Batch Aborted

Tags: java JDBC Database Transactions Loop Commit Transaction Management

Posted on Fri, 11 Sep 2026 16:24:15 +0000 by blueway