# rollback und throws



## nieselfriem (17. Jan 2011)

Hallo!

Wenn man in Java die autcommit Funktion ausschaltet und die ganze Aktion in einen try and catch Block packt, so erfolgt nach meinem bisherigen wissen die rollback()-Funktion im  catch-Zweig.

Nun habe ich aber folgendes "Problem"
meine Methoden sind in etwa so aufgebaut:

```
public void add(Entry entry) throws SQLException {
   if(conn != null) {
     conn.setAutoCommit(false);
     PreparedStatement stmt = conn.prepareStatement("INSERT INTO `Tabelle` (`Zelle1`,`Zelle2`) VALUES (?,?) ");
     stmt.setString(1,entry.getWert1());
     stmt.setString(2,entry.getWert2());

     stmt.executeUpdate()
     conn.commit()
     conn.setAutoCommit(true);
     conn.close();
   }
```
Da ich die Exceptions noch nicht direkt in der Methode abfange und somit auch kein catch-Block habe. Wo setze ich dann am besten das Rollback an. Mit welcher Bedingung kann ich evtl. überprüfen, das die Transaktion schief gelaufen ist und das Rollback ansetzen kann.

Gruß niesel


----------



## SlaterB (18. Jan 2011)

z.B.

```
public void add(Entry entry) throws SQLException {
   if(conn == null) return;
   boolean error = true;
   try {
     conn.setAutoCommit(false);
     PreparedStatement stmt = conn.prepareStatement("INSERT INTO `Tabelle` (`Zelle1`,`Zelle2`) VALUES (?,?) ");
     stmt.setString(1,entry.getWert1());
     stmt.setString(2,entry.getWert2());

     stmt.executeUpdate()
     error = false;
   } finally {
     if (error) conn.commit() else conn.rollback();
     conn.setAutoCommit(true);
     conn.close();
   }
```
finally wird immer ausgeführt, auch wenn eine Exception bereits ausgelöst und am Ende durchaus noch geworfen wird, 
bisschen komisch aber doch sehr brauchbar,

was spricht eigentlich gegen AutoCommit bei nur einem Befehl?


----------

