# Rollback bei nicht richtiger transaktion?



## Guest (27. Jun 2007)

Hallo,


ich lese XML-Files ein und schreibe diese in meine MySQL Datenbank.
Für jedes XML-File schreibe ich in zwei Tabellen.
Es kann sein, dass ein XML-File sonderzeichen etc enthält, sodass bei der einen Tabelle ein XML-Fehler auftritt.
Leider schreibt er trotzdem die anderen Werte in die zweite Tabelle.

Ich habe bereits AutoCommit(false) gesetzt.

Wie kann ich das am besten zu realisieren, dass er erst die beiden Insert Statements macht und wenn beide erfolgreich waren ein commit ansonsten ein Roolback.

Ich habe das wie folgt aufgebaut.





```
String sql="Insert into xmlfile (filename,text) values('" +file.getName() + "','" + inhalt +"')";
		this.adapter.schreibeDatansaetze(sql);// Führt execute aus.
		
		String sql2="Insert into xmlinformation(filename,filepath,md5) values ('"+ file.getName() +"','" + pfad+"','"+ md5+"')";
		this.adapter.schreibeDatansaetze(sql2);//Führt execute aus.		
		
		
		this.adapter.speichereDatensaetze();//Führt Commit aus.
```


Wer kann mir da einen Tip geben? Oder Quelltext, wie ich das realisiere, dass er nur die Daten dauerhaft Speichert, wenn beide Abfragen erfolgreich sind?

Gruß


----------



## HoaX (27. Jun 2007)

nimm ein preparedStatement, dann sind sonderzeichen kein problem mehr


----------



## Guest (28. Jun 2007)

HoaX hat gesagt.:
			
		

> nimm ein preparedStatement, dann sind sonderzeichen kein problem mehr



Mhm das kenne ich jetzt nicht wirklich. Muss dann wohl meine ganze DB-KLasse umschreiben


----------



## HoaX (28. Jun 2007)

preparedstatement ist der schöne weg für so ein problem.

aber zum eigentlichen problem, wenn du autocommit auf false stellst, dann rufst "begin" auf, dann deine änderungen, fliegt ne exception rufst du "rollback" auf, ansonsten "commit".


----------

