JDBC: Ist `con.rollback()` hat nur einen Effekt, wenn ' Connell.commit` nicht gelungen?

Ich bin neu in Java JDBC, und entwickelt kleine Datenbank-Anwendung. Ich Lerne aus
O ' Reilly - Datenbank-Programmierung mit JDBC und Java-2. Auflage.

Ist con.rollback() hat nur Auswirkungen, wenncon.commit nicht gelungen?

Eigentlich denke ich, dass der Aufruf con.rollback() hat seine Wirkung, auch wenn con.commit() gelungen. Das bedeutet, dass die Verwendung es als " Rückgängig' Action.

Ich habe versucht, den Aufruf con.rollback() nach con.commit() gelungen, aber es funktioniert nicht so, wie ich vermutete. So ist es in Ordnung/zu erwarten?

Diesem Beispiel ist aus dem Buch das ich oben erwähnte:

con.rollback() auskommentiert ist. es ist in der Nähe des Ende, bevor con.close(). Versuchen Sie die Kommentarzeichen. con.rollback() spielt keine Rolle Dinge wieder nach con.commit() gelungen.

import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;

public class UpdateLogic
{

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

        try
        {
            String driver = "com.mysql.jdbc.Driver";
            Class.forName(driver).newInstance();
            String url = "jdbc:mysql://localhost:3306/Company";
            Statement s;
            con = DriverManager.getConnection(url, "root", "");
            con.setAutoCommit(false); //make sure auto commit is off!
            s = con.createStatement();//create the first statement
            s.executeUpdate("INSERT INTO employee VALUES ('1', 'employee 1', '22','00-1234' )");

            s.close(); //close the first statement
            s = con.createStatement(); //create the second statement
            s.executeUpdate("INSERT INTO employee VALUES ('2', 'employee 2', '21','00_4321' )");

            con.commit(); //commit the two statements
            System.out.println("Insert succeeded.");
            s.close(); //close the second statement
        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException ex)
        {
            Logger.getLogger(UpdateLogic.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SQLException e)
        {
            if (con != null)
            {
                try
                {
                    con.rollback();
                } //rollback on error
                catch (SQLException i)
                {
                }
            }
            e.printStackTrace();
        } finally
        {
            if (con != null)
            {
                try
                {
                  //con.rollback();
                    con.close();
                } catch (SQLException e)
                {
                    e.printStackTrace();
                }
            }
        }
    }
}
Seine schwer zu machen, was Sie Fragen. Wenn eine commit erfolgreich ist dann fertig, abgeschlossen, Sie können nicht Rollen es wieder an diesem Punkt. Sie haben, um eine Transaktion rollback ,bevor aufrufen der commit Methode.

InformationsquelleAutor Saleh Feek | 2013-02-22

Schreibe einen Kommentar