import java.sql.*; /** Demonstratie-programma voor het begrip "transactie". * @author Lieven Smits * @version 1.1 7/9/2000 */ class TestOnderbrokenTransactie { /** Demonstreer het gebruik van transacties aan de hand * van opeenvolgende INSERT-opdrachten in een ODBC-datasource. * We genereren bewust een exception nadat twee INSERTs * doorgegeven zijn. * Als de opdracht "setAutoCommit" (zie broncode) er staat * zoals nu, dan zal geen van beide INSERTs een blijvend * effect hebben op de inhoud van de gegevensbank. De lezer * wordt uitgenodigd deze "setAutoCommit"-opdracht in * commentaar te plaatsen en na te gaan wat het effect is. */ public static void main(String[] args) { Connection con; Statement stmt; try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); con = DriverManager.getConnection( "jdbc:odbc:Kruidenier", "", ""); /* De volgende regel zegt dat we met transacties van meer dan 1 opdracht willen kunnen werken. Als je ze uitcommentarieert (en de database leegmaakt, en de toepassing opnieuw compileert en uitvoert), dan worden beide personen effectief aan de tabel 'klant' toegevoegd, welke Exceptions er daarna ook optreden. */ con.setAutoCommit(false); stmt = con.createStatement(); try { // toevoegen eerste klant stmt.executeUpdate("INSERT INTO klant (klantnummer, naam)" + " VALUES (12, 'Hungry Joe')"); // toevoegen tweede klant stmt.executeUpdate("INSERT INTO klant (klantnummer, naam)" + " VALUES (13, 'Doc Daneeka')"); // De volgende regel simuleert een 'onverwachte' fout throw new SQLException("Met opzet"); } catch (SQLException e) { // Maak beide toevoegingen ongedaan con.rollback(); System.out.println(e); } finally { stmt.close(); con.close(); } } catch (Exception e) { System.out.println(e); } } }