# Batch Processing Multiple statements ek network round-trip mein execute karo — much faster. ## Statement Batch ```java try (Connection conn = DBConfig.getConnection(); Statement stmt = conn.createStatement()) { conn.setAutoCommit(false); stmt.addBatch("INSERT INTO students VALUES (null, 'Ram', 20, 85)"); stmt.addBatch("INSERT INTO students VALUES (null, 'Shyam', 22, 90)"); stmt.addBatch("UPDATE students SET marks = 95 WHERE id = 1"); stmt.addBatch("DELETE FROM students WHERE age > 25"); int[] results = stmt.executeBatch(); // Execute all at once conn.commit(); System.out.println("Batch executed: " + results.length + " statements"); } ``` ## PreparedStatement Batch (Better) ```java String sql = "INSERT INTO students (name, age, marks) VALUES (?, ?, ?)"; try (Connection conn = DBConfig.getConnection(); PreparedStatement ps = conn.prepareStatement(sql)) { conn.setAutoCommit(false); String[][] data = { {"Ram", "20", "85"}, {"Shyam", "22", "90"}, {"Geeta", "21", "88"}, {"Mohan", "23", "75"} }; for (String[] row : data) { ps.setString(1, row[0]); ps.setInt(2, Integer.parseInt(row[1])); ps.setDouble(3, Double.parseDouble(row[2])); ps.addBatch(); // Every 100 records execute karo (large datasets) } int[] counts = ps.executeBatch(); conn.commit(); System.out.println("Inserted: " + counts.length + " records"); } ``` ## Performance Comparison - Without batch: 1000 inserts = 1000 network calls - With batch: 1000 inserts = 1 network call (10-100x faster)