MySql kein Rollback

Status
Nicht offen für weitere Antworten.

Catscratch1

Mitglied
Ich finde es übel, dass MySQL keinen Rollback beherscht.
Da macht man eine JDBC Applikation, und kann, wenn eine Relation nicht
komplett geparst werden kann, keinen Rollback durchführen.

Das ist ein Unding finde ich.
Werde jetzt auf PostgreSQL umsteigen. Die ist wesentlich mächtiger und auch OpenSource :p
 

P3AC3MAK3R

Top Contributor
Soweit ich informiert bin, unterstützt MySQL durchaus Transaktionen und somit Rollbacks.

Ich bin mir aber nicht so ganz sicher, ob Du den Sinn von Transaktionen überhaupt verstanden hast.
 

DP

Top Contributor
da sollte man sich erstmal informieren und dann den dicken machen ;)

((Connection)this.cm.getConnection()).setAutoCommit(false);
stmt.execute(sql)

wenn execute okay: ((Connection)this.cm.getConnection()).commit();
bei fehlern: ((Connection)this.cm.getConnection()).rollback();

und zum schluss wieder: ((Connection)this.cm.getConnection()).setAutoCommit(true);
 

Grizzly

Top Contributor
Populärer ist sie schon. Aber dann hat es sich aber auch. ;)

MySQL unterstützt in den meisten Version keine Transaktionen und damit auch keine Rollbacks. Soviel ich noch weiss, muss man die Datenbank / die Tabellen auch zusätzlich noch in einen bestimmten Format anlegen. Genaueres ist aber auf der MySQL Webseite nachzulesen. :)
 

thE_29

Top Contributor
außerdem ist die jetengine(access) woll ein größerer vollscheiss als mysql, weil die fast gar keine oracle befehle kennt!

die kennt net mal lower, oder upper!!
 

foobar

Top Contributor
Grizzly hat gesagt.:
Populärer ist sie schon. Aber dann hat es sich aber auch. ;)
MySQL unterstützt in den meisten Version keine Transaktionen und damit auch keine Rollbacks. Soviel ich noch weiss, muss man die Datenbank / die Tabellen auch zusätzlich noch in einen bestimmten Format anlegen. Genaueres ist aber auf der MySQL Webseite nachzulesen. :)
Um Transaktionen und Foreignkeys nutzen zu können, mußt du die entsprechenden Tabellen auf InnoDB umstellen. Dazu muß als erstes die my.cnf angepasst werden:
Code:
#skip-innodb
# Uncomment the following if you are using InnoDB tables
innodb_data_home_dir = /opt/lampp/var/mysql/
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /opt/lampp/var/mysql/
innodb_log_arch_dir = /opt/lampp/var/mysql/

Jetzt kann man die Tabellen ganz einfach auf InnoDB umstellen
Code:
alter table mytable
type=InnoDB

Ansonsten empfehle ich MaxDB. Das ist ein Zusammenschluß von Mysql und SAPDB. MaxDB bietet den kompletten Funktionsumfang eines Enterprise RDBMS (Views, Trigger, Stored Procedures etc.pp.)
 

DP

Top Contributor
mal was anderes zu mysql: wo sind denn die log-files zu finden, wo alle abgesetzten dml-statements gespeichert werden?
 
G

Guest

Gast
So zu Rollback:

Also natürlich sind die Methoden setAutoCommit(false) und rollback und commit da. Bin ja nicht blöd.

Aber wer die Doku liest, ist klar im Vorteil:

Der MySQL JDBC Treiber hat nur leere Methoden für rollback und commit und hat sie daher nicht implementiert,
da im MySQL Server die Funktionen nicht implementiert sind. Daher hat ein Test dieser Funktionen, bevor ich die Doku gelesen habe, nicht funktioniert!

Also MySQL ist sehr schlank und schnell, aber hat sehr wenige Funktionen!!
 

Catscratch1

Mitglied
Wie gesagt, Transaktionen sind jedenfalls im JDBC Treiber nicht implementiert.

Und sehrwohl kenn ich mit Transaktionen aus.
Jedoch ist mein Beispiel etwas zu kompliziert, um es zu erklären.

Jedenfalls handelt es sich um ein Relationen Modell in der 3. Normalform und ist sehr komplex,
so dass mir Transaktionen von Vorteil gewesen wären.
Leider kann ich nix anderes nehmen, weil mein Chef mir nur diese DB gestellt hat.

Aber dem Ingenieur ist nix zu schwör! Daher habe ich einen halben "Rollback" selbst gebaut!
 
G

Guest

Gast
nein, deswegen habe ich auch gesagt ein halber.
wenn anhand irgendeines verbindungsabbruchs, fehlerhafte daten, oder sonst was,
ne transaktion schief geht.
die alten zustände werden gespeichert. geht was schief, werden die änderungen gelöscht und
das alte zurückgeschrieben.

mehr kann ich da leider nicht machen, weil erstens zu viel aufwand, zweitens ein eigenes DBMS zu schreiben ist auch schwachsinn!
 

Dangermouse

Mitglied
Hallo Leute!

Ich habe ein echtes Problem mit der Rollback Funktion. Zum testen habe ich mir ein kleines Programm geschrieben mit einer Hand voll Inserts. Ich erwarte nun, dass kein Insert durchgeführt wird, wenn eins schiefgeht. Ist aber nicht so. Die Inserts, die fehlerfrei sind, werden ausgeführt und das letzte Fehlerbehaftete eben nicht. Schon komisch? Wo ist mein Fehler?

Vielen Dank

Stefan

Code:
import java.sql.*;
     
public class DBConnection {

	public static void main(String args[]) {
		  
		Connection con = null;

		try {
			Class.forName("com.mysql.jdbc.Driver");

		} catch(java.lang.ClassNotFoundException e) {
			System.err.print("ClassNotFoundException: "); 
			System.err.println(e.getMessage());
		}

		try {
			
			con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test", "user", "test");
			con.setAutoCommit(false);
			Statement statement = con.createStatement();
			     
			statement.execute("INSERT INTO Test VALUES(1, 'Andi')");
			statement.execute("INSERT INTO Test VALUES(2, 'Bandi')");
			statement.execute("INSERT INTO Test VALUES(3, 'Candi')");
			statement.execute("INSERT INTO Test VALUES(3, 'Dandi')"); //duplicate key!
			con.commit();
			con.setAutoCommit(true);
			   
			statement.close();
			con.close();      
		}
		catch(SQLException e)
		{
			e.printStackTrace();
			try {
				con.rollback();
			}
			catch (SQLException ex){}
		}
	}
}
 
T

tuxedo

Gast
@Dangermouse

Anonymous hat gesagt.:
Aber wer die Doku liest, ist klar im Vorteil:

Der MySQL JDBC Treiber hat nur leere Methoden für rollback und commit und hat sie daher nicht implementiert,
da im MySQL Server die Funktionen nicht implementiert sind. Daher hat ein Test dieser Funktionen, bevor ich die Doku gelesen habe, nicht funktioniert!

Nicht nur wer die Doku ließt ist im Vorteil. Im Thread mitlesen hilft auch des öfteren ;-)
 

FenchelT

Bekanntes Mitglied
Catscratch1 hat gesagt.:
Ich finde es übel, dass MySQL keinen Rollback beherscht.
Da macht man eine JDBC Applikation, und kann, wenn eine Relation nicht
komplett geparst werden kann, keinen Rollback durchführen.

Das ist ein Unding finde ich.
Werde jetzt auf PostgreSQL umsteigen. Die ist wesentlich mächtiger und auch OpenSource :p



Habe meinen Beitrag wieder geloescht. Sehe ja jetzt erst, dass der Thread 2k4 eroeffnet wurde :roll:
 

Dangermouse

Mitglied
Danke für die schnelle Antwort!

Da hätte ich mir mal die Doku schnappen sollen. Was die Infos in diesem Thread angeht: Ich hatte gehofft, dass von 2004 bis heute sich diesbezüglich was bei MySQL getan hat.

Grüße

Stefan
 

FenchelT

Bekanntes Mitglied
Dangermouse hat gesagt.:
Danke für die schnelle Antwort!

Da hätte ich mir mal die Doku schnappen sollen. Was die Infos in diesem Thread angeht: Ich hatte gehofft, dass von 2004 bis heute sich diesbezüglich was bei MySQL getan hat.

Grüße

Stefan

Dann haette ich es doch stehen lassen koennen :roll:

In der Doku zur Version 5-1 in Kapitel 13.4 steht alles rund um Transaktionen in MySQL, die es sehr wohl gibt.
Es hat sich also was getan.

Gruesse
 

Dangermouse

Mitglied
alex0801 hat gesagt.:
@Dangermouse

Anonymous hat gesagt.:
Aber wer die Doku liest, ist klar im Vorteil:

Der MySQL JDBC Treiber hat nur leere Methoden für rollback und commit und hat sie daher nicht implementiert,
da im MySQL Server die Funktionen nicht implementiert sind. Daher hat ein Test dieser Funktionen, bevor ich die Doku gelesen habe, nicht funktioniert!

Nicht nur wer die Doku ließt ist im Vorteil. Im Thread mitlesen hilft auch des öfteren ;-)


Dein Beitrag hat mich nochmal veranlasst in die Doku zu schauen! ;-)
Und siehe da. Rollbacks funktionieren, man muss allerdings die Speicherengine auf "InnoDB" stellen. MyISAM bietet diese Funktion nicht.

Nur so nebenbei: Spricht irgendetwas gegen InnoDB?

Vielen Dank auch nochmal an FenchelT

Stefan
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Juelin Java und MySQL MariaDB - WHERE-Klausel Datenbankprogrammierung 17
W MySQL-Connector funktioniert nicht über WLAN -> MacOS Datenbankprogrammierung 10
Juelin MySQL Datenbankmit glassfish und Netbeans Datenbankprogrammierung 18
Auf MySql Datenbank zugreifen funktioniert nicht Datenbankprogrammierung 8
TheSkyRider MySQL Datenbankzuordnung in Verbindung mit Java Datenbankprogrammierung 7
Warum funktioniert MySQL nicht Datenbankprogrammierung 8
M MySQL Datenbank in Array Datenbankprogrammierung 2
P MySQL- Neues Passwort Datenbankprogrammierung 1
btwX28 mysql abfrage über phpmyadmin Datenbankprogrammierung 8
sserio SQL oder MySQL Datenbankprogrammierung 44
OnDemand Mysql Query Builder Datenbankprogrammierung 1
Z MySQL "Too many connections" auch nach schliessen der Connections. Datenbankprogrammierung 10
yakazuqi MySQL MySQL Connection reset Datenbankprogrammierung 7
OnDemand MySql Foreign Key nötig oder unnötig Datenbankprogrammierung 3
M Mysql Views und Hibernate Caching Datenbankprogrammierung 4
W MYSQL Datenbank Login Android Datenbankprogrammierung 3
OnDemand MySQL und mongoDB wann macht was Sinn? Datenbankprogrammierung 11
bueseb84 Spring Boot : Update Mysql Datenbank Datenbankprogrammierung 1
Avalon Attribute werden mit Unterstrich in eine MySQL Datenbank eingetragen Datenbankprogrammierung 10
D MYSQL goorm IDE - Wie speichern? Datenbankprogrammierung 0
OnDemand Mysql UPDATE if condition Datenbankprogrammierung 14
D MySQL Geburtsdatum per KW abfragen Datenbankprogrammierung 1
C Java MySQL check if value exists in database Datenbankprogrammierung 2
H Fehler bei getConnection zu MySQL Datenbank Datenbankprogrammierung 18
J MySQL - Primary Key Date,Time vs ID Datenbankprogrammierung 16
ruutaiokwu MySQL: Messwerte, welche stagnieren interpolieren? Datenbankprogrammierung 2
S Datenbank MySQL und Java Datenbankprogrammierung 8
Thallius MySQL JDBC auf Linux Server zu mySQL DB auf anderem Linux Server wirft Access denied Datenbankprogrammierung 5
P Adressadministration mit Java und mySQL Datenbankprogrammierung 14
D MySQL Abfrage Datenbankprogrammierung 5
D MySQL Abfrage sortieren Datenbankprogrammierung 4
platofan23 MySQL Java Programm findet Treiber für mySQL auf Debian-Server nicht? Datenbankprogrammierung 11
J MySQL MySQL Risiken bei Stromausfall minimieren Datenbankprogrammierung 9
D MySQL Abfrage SUM datediff Datenbankprogrammierung 3
H MySQL MySQL - Keine Verbindung zur Datenbank?! Datenbankprogrammierung 4
G MySQL Problem mit MySQL verbindung Datenbankprogrammierung 8
X MySQL Java hat keinen Zugriff auf MySQL Datenbankprogrammierung 9
Z [JDBC][MYSQL] Access denied Datenbankprogrammierung 7
D MySQL Connection richtig herstellen. Wie ? Datenbankprogrammierung 7
D Multiple Connection mit MySQL Datenbankprogrammierung 4
D MySQL Eibinden des "mysql-connector" in eine fertige Jar Datenbankprogrammierung 3
L MySQL Android zu externer MySQL Datenbank verbinden Datenbankprogrammierung 5
P Daten in eine mySQL Datenbank einfügen Datenbankprogrammierung 4
D MySQL Zeilen kumulieren Datenbankprogrammierung 8
D MySQL Abfrage mit kumulierten Werten Datenbankprogrammierung 16
K Servlet-MySQL DB Datenbankprogrammierung 2
X MySQL Json String in MySQL einfügen. Datenbankprogrammierung 20
OnDemand Update auf Mysql läuft nicht durch Datenbankprogrammierung 30
K Java Object mit Hibernate in MySQL abspeichern Datenbankprogrammierung 1
D Datumsformat aus MySQL ändern Datenbankprogrammierung 15
G MySQL Java Problem: Nullpointer Exception obwohl Daten vorhanden sind? Datenbankprogrammierung 2
K MySQL LAN-MySQL Server mit XAMPP Datenbankprogrammierung 2
R ERModel der Datebanken (ORACLE,MySQL,MS-SQL usw) Datenbankprogrammierung 4
X MySQL In MySQL Funktionen erstellen, wenn Zelle leer dann andere Zelle ändern? Datenbankprogrammierung 9
K Anfängerfrage CSV in MySQL Datenbankprogrammierung 41
I MySQL Wert nachträglich bearbeiten Datenbankprogrammierung 1
N MySQL Datenbank lokal Datenbankprogrammierung 3
B MySQL: Port ändern über GUI? Wo und wie Port ändern? Datenbankprogrammierung 0
B MySQL installieren - silent / User anlegen Datenbankprogrammierung 3
X MySQL Verbindungdsaufbau MySql auf Ubuntu-Server Datenbankprogrammierung 10
F MySQL Wie kann ich in Java Datensätze aus einer MySQL Datenbank gezielt in einzelne Arrays schreiben? Datenbankprogrammierung 9
P MySQL JPA / MySQL - Fehler bei type=innoDB Datenbankprogrammierung 8
M MySQL MySQL DATETIME-Import Datenbankprogrammierung 9
P MySQL Connection Global Datenbankprogrammierung 13
J mySQL- Java Application - Zugriff über Internet Datenbankprogrammierung 3
P MySQL-Verbindung in anderer Klasse nutzen Datenbankprogrammierung 2
D JavaFX Anwendung zugriff auf MySQL DB. Datenbankprogrammierung 2
D MySQL Grundsätzliche Fragen zu MySQL Datenbankprogrammierung 3
B MySQL LogIn Daten im Code verstecken Datenbankprogrammierung 3
M MySQL-Syntax-Fehler Datenbankprogrammierung 1
M In MySql Datenbank schreiben Datenbankprogrammierung 6
D mySQL Timestamp in RegularTimePeriod bzw Second Datenbankprogrammierung 3
H SHOW Tables in Java/MySQL Datenbankprogrammierung 8
windl MySQL und HSQLDB Datenbankprogrammierung 4
S Anbindung zur mysql von mit Swing und AWT Datenbankprogrammierung 22
F MySQL+ Netbeans: Datenbanken mit Automatisch generierten Entity Classes get und set Datenbankprogrammierung 2
I MySQL Hibernate / MySQL alias in WHERE clause Datenbankprogrammierung 1
C MYSQL kann wert nicht eintragen Datenbankprogrammierung 3
D Aktualisierung einer ListView mit Daten aus MySQL-DB Datenbankprogrammierung 5
F BPlaced MySql Datenbank ansprechen Datenbankprogrammierung 5
S MySQL MySQL will einfach nicht, bitte um Rat Datenbankprogrammierung 4
M MySQL Datenbank durchsuchen Datenbankprogrammierung 5
Z MySQL mysql Facharbeit: Tipps und Ideen gesucht Datenbankprogrammierung 5
dat_vin JavaFX Datenbankverbindung über JPA und MySQL Error Datenbankprogrammierung 0
K MySQL Datenbank 2facher Zugriff Datenbankprogrammierung 1
Z MySQL Shopsystem mit mysql und Java Datenbankprogrammierung 8
S [MySQL] Topliste Datenbankprogrammierung 2
H Datenbank-Anbindung Java/MySQL Datenbankprogrammierung 2
T MySQL MySQL - Insert into fügt zwei identische Datensätze ein Datenbankprogrammierung 2
A Eine MySQL Zeile mit JDBC löschen Datenbankprogrammierung 5
J Dateien in MySQL speichern & indizieren Datenbankprogrammierung 2
B MySQL MySQL-Abfrage von aufsummierter Zeit Datenbankprogrammierung 3
K MySQL Datenbankbackups Datenbankprogrammierung 5
P MySQL INSERT / UPDATE MySQL - perStoredProcedure oder direkt im Code Datenbankprogrammierung 3
kaoZ HyperSQL vs. MYSQL Datenbankprogrammierung 4
L JSONArray/JSONObject MySQL-Servlet Abfrage Datenbankprogrammierung 2
V Internationalization mit MySql Datenbankprogrammierung 1
K Adressverwaltung mit MySql und Java? Datenbankprogrammierung 11
M Java Mysql verbinden Datenbankprogrammierung 3
L Zugriff auf lokal gespeicherte mySQL Datenbank Datenbankprogrammierung 3

Ähnliche Java Themen


Oben