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. Grundkenntnisse (Methoden von Datumsobjekten) ...
<br />Zuvor haben wir gelernt, wie man Zelll...
1. Erstellen Sie zunächst eine Datei hello-world....
Da das Projekt den https-Dienst nutzen muss, habe...
1. Felder hinzufügen: Tabelle Tabellennamen änder...
Kürzlich erhielt ich eine Anforderung für eine Fun...
Vorwort Wenn wir in der täglichen Entwicklung MyS...
Vorwort Nach einem Failover sind Synchronisierung...
Benutzerdefinierte Tags können in XML- und HTML-Da...
In MySQL liest die Funktion LOAD_FILE() eine Date...
Inhaltsverzeichnis Hintergrund: Reibungslose Upgr...
Häufig gestellte Fragen zu benutzerdefinierten Bi...
Inhaltsverzeichnis Vorwort Architektur auf einen ...
1. Übersicht über Dateiberechtigungen und Eigentu...
Vorwort MySQL ist das beliebteste relationale Dat...