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
1.fullpage.js Download-Adresse https://github.com...
Inhaltsverzeichnis Ein Set ist eine spezielle Sam...
Bei Zellen können die hellen Rahmenfarben individ...
Inhaltsverzeichnis 1. Initialisierungsstruktur 2....
1. Der Unterschied zwischen TEXT und BLOB Der ein...
Fremdschlüssel Abfrage, bei welchen Tabellen der ...
Inhaltsverzeichnis Szenario Kernthemen Statusüber...
Zunächst einmal spielt der Blogger die Community-...
Überblick Was das aktuelle Standardnetzwerk von D...
Schauen wir uns zunächst meinen Fehlercode an. ht...
Teil des Codes: Code kopieren Der Code lautet wie...
Die MySQL-Versionsnummer ist 5.7.28. Tabelle A ha...
Ich glaube, dass viele Benutzer, die Websites ers...
Wir alle Webmaster wissen, dass es bei der Optimi...
Heute zeige ich Ihnen ein mit nativem JS implemen...