So beheben Sie den Fehler beim MySQL-Transaktionsvorgang Atomarität von Transaktionen: Eine Transaktion ist eine logische Arbeitseinheit in einer Datenbank. Alle in einer Transaktion enthaltenen Operationen werden entweder ausgeführt oder nicht ausgeführt. Um Transaktionsatomarität zu erreichen, reicht ein einzelner Commit- oder Rollback-Befehl nicht aus, da beispielsweise der Commit-Befehl nur die erfolgreich ausgeführten DML-Anweisungen einer Transaktion an die Datenbank übermittelt. Wenn Sie die Atomizität von Transaktionen erreichen möchten, müssen Sie die Commit- und Rollback-Befehle in Verbindung mit einer Geschäftslogik im Programm verwenden. Der spezifische Geschäftslogikcode lautet wie folgt: 1. Phänomen Die Transaktion wird im Programm zum Einfügen geöffnet, es erfolgt jedoch kein Commit. Die Daten in der Tabelle sind bereits vorhanden und die eingefügten Daten können auch bei einem Rollback nicht gelöscht werden. 2. Gründe Die Speicher-Engine dieser Tabelle ist myisam, nicht innoDB, und unterstützt kein Transaktions-Rollback(). 3. Lösung Verwenden Sie „alter table xxxx engine = innoDB;“, um die Tabelle in die InnoDB-Engine zu ändern. Das Rollback erfolgt normal. 4. Code private void testCrud() { Verbindung conn = null; //Verbindungsobjekt PreparedStatement pstmt = null; //Vorkompiliertes SQL-Anweisungsobjekt try{ //MySQL-Treiber laden Class.forName("com.mysql.jdbc.Driver"); //Verbindungszeichenfolge String url = "jdbc:mysql://localhost:3306/test"; //Datenbankverbindung herstellen conn = DriverManager.getConnection(url,"root",""); //Transaktionsisolationsebene festlegen // conn.setTransactionIsolation(Connection. TRANSACTION_REPEATABLE_READ); //Autocommit auf „false“ setzen und Transaktion starten conn.setAutoCommit(false); //Update-Anweisung mit Parametern String sql = "INSERT INTO user_info (Benutzername, Passwort, Alter) Werte(?,?,?)"; //Anweisung vorbereiten pstmt = conn.prepareStatement(sql); //Parameter binden, Aktualisierungsanweisung ausführen und 1000 Yuan vom Kontostand von Zhang San abziehen pstmt.setString(1, "zhangui"); pstmt.setString(2, "1111"); pstmt.setInt(3, 300); pstmt.execute(); //Parameter binden, Aktualisierungsanweisung ausführen und den Kontostand von Li Si um 1.000 Yuan erhöhen// pstmt.setString(1, "zzzzzzzzzzzzzzzzz"); //Ungültige Parameter sind gebunden//pstmt.setString(2, "1111111111"); //pstmt.setInt(3, 500); //pstmt.execute(); //Es wird eine SQL-Ausnahme ausgelöst //Transaktion festschreiben //conn.commit(); System.out.println("Transaktion übermittelt, Übertragung erfolgreich!"); //Close-Anweisung, Verbindung pstmt.close(); conn.close(); }fang(Ausnahme e){ versuchen{ conn.rollback(); //Transaktion zurücksetzen System.out.println("Transaktion erfolgreich zurückgesetzt, es wurden keine Datensätze aktualisiert!"); }fang(Ausnahme re){ System.out.println("Rollback-Transaktion fehlgeschlagen!"); } e.printStackTrace(); }Endlich{ wenn(pstmt!=null) versuche{pstmt.close();}fang(Ausnahme ignorieren){} if(conn!=null) versuche{conn.close();}catch(Ausnahme ignorieren){} } } Vielen Dank fürs Lesen, ich hoffe, es kann Ihnen helfen, danke für Ihre Unterstützung dieser Site! Das könnte Sie auch interessieren:
|
<<: React implementiert den Beispielcode der Radiokomponente
Ich bin auf den MySQL-FEHLER 1045 gestoßen und ha...
js-Datentypen Grundlegende Datentypen: Zahl, Zeic...
#include <linux/moduleparam.h> 1. Modulpara...
Inhaltsverzeichnis 1. Umweltvorbereitung 2. Ausfü...
Vorwort Ich habe vor Kurzem Linux gelernt und dan...
Inhaltsverzeichnis Frage: 1. Aktivieren Sie die B...
Inhaltsverzeichnis Vorwort Was sind erstellbare S...
Inhaltsverzeichnis 1. Einführung in den Autofs-Di...
Textschatten Textschatten: horizontaler Versatz, ...
Vorwort Der Grund, warum die InnoDB-Engine von My...
Inhaltsverzeichnis Überblick Statische Typprüfung...
Das Umschreibmodul ist das Modul ngx_http_rewrite...
Dieser Artikel gibt Ihnen den spezifischen Code v...
Inhaltsverzeichnis Vorwort 1. Grundlegende Umgebu...
Docker fragt Bilder in einem privaten Register ab...