gpt4 book ai didi

java - JDBC:是否仅当调用 commit() 方法不成功时,调用 rollback() 方法才有效?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:37:17 24 4
gpt4 key购买 nike

我是 Java JDBC 新手,开发了一个小型数据库应用程序。我正在学习 O'Reilly - Database Programming with JDBC and Java 2nd Edition。

con.rollback()只有在con.commit不成功时才会生效吗?

我预计即使 con.commit() 成功调用 con.rollback() 也会产生效果。换句话说,将其用作“撤消”操作。

我尝试在 con.commit() 成功后调用 con.rollback(),但它没有按预期工作。那么好/预料之中吗?

这个例子来 self 上面提到的那本书:

con.rollback() 的调用被注释掉了。在 con.close() 之前接近尾声。我尝试取消注释并运行它。但是,con.rollback() 不会在 con.commit() 成功后回滚。

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();
}
}
}
}
}

最佳答案

当您调用commit() 时,您完成/关闭了当前事务。因此,由于 rollback()撤消当前事务中的任何更改(根据 javadoc),它实际上什么都不做。

关于java - JDBC:是否仅当调用 commit() 方法不成功时,调用 rollback() 方法才有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15031866/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com