念栢笠 2023-02-17 16:07 采纳率: 0%
浏览 17

jdbc设置手动提交事务后还有必要考虑回滚吗?

jdbc设置手动提交事务后还有必要考虑回滚吗?只要执行不到commit()方法之前就算有异常那也不会提交事务啊,对数据也没有影响啊。

18行到39行

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class Test {
    public static void main(String[] args) {
        Connection connection = null;
        PreparedStatement preparedstatement = null;
        try {
            //1.注册驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            //2.获取连接
            String url = "jdbc:mysql:/";
            String username = "";
            String password = "";
            connection = DriverManager.getConnection(url,username,password);
            connection.setAutoCommit(false);//手动提交
            //3.获取数据库操作对象
            preparedstatement = connection.prepareStatement("update account set balance = ? where id = ?");
            //传值
            preparedstatement.setInt(1,5000);
            preparedstatement.setString(2,"zhang");
            //4.执行sql
            preparedstatement.executeUpdate();

            String s = null;//模拟中途出现异常,后面语句无法执行
            s.toString();
            //传值
            preparedstatement.setInt(1,5000);
            preparedstatement.setString(2,"li");
            //4.执行sql
            preparedstatement.executeUpdate();
            connection.commit();//手动提交
        } catch (Exception throwables) {
            //捕获到异常回滚事务
            if (connection != null) {
                try {
                    connection.rollback();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            throwables.printStackTrace();
        }finally {
            //6.释放资源
            if (preparedstatement != null) {
                try {
                    preparedstatement.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
        }
    }
}

  • 写回答

4条回答 默认 最新

  • 阳光宅男xxb 2023-02-17 16:11
    关注

    你的理解是对的。在异常捕获中处理回滚即可。没有执行到commit方法不会提交数据的。望采纳!!

    评论

报告相同问题?

问题事件

  • 创建了问题 2月17日

悬赏问题

  • ¥15 没输出运行不了什么问题
  • ¥20 输入import torch显示Intel MKL FATAL ERROR,系统驱动1%,: Cannot load mkl_intel_thread.dll.
  • ¥15 点云密度大则包围盒小
  • ¥15 nginx使用nfs进行服务器的数据共享
  • ¥15 C#i编程中so-ir-192编码的字符集转码UTF8问题
  • ¥15 51嵌入式入门按键小项目
  • ¥30 海外项目,如何降低Google Map接口费用?
  • ¥15 fluentmeshing
  • ¥15 手机/平板的浏览器里如何实现类似荧光笔的效果
  • ¥15 盘古气象大模型调用(python)