4.【JDBC事务】

news/2024/5/18 23:27:24 标签: jdbc

事务

概念:一个包含多个步骤的业务操作。如果这个业务操作被事务管理,则这多个步骤要么同时成功,要么同时失败。

操作

  1. 开启事务
  2. 提交事务
  3. 回滚事务

使用Connection对象来管理事务

开启事务:在执行sql前开启事务

  • 调用该方法设置参数为false,即开启事务,默认是关闭的。
setAutoCommit(boolean autoCommit);

代码实现:

//开启事务
conn.setAutoCommit(false);

提交事务:在所有sql都执行完提交事务

commit() 

代码实现:

//提交事务
conn.commit();

回滚事务:在catch中回滚事务

conn.rollback() 

代码实现:

if (conn != null) { // 避免conn空指针异常
    try {
        conn.rollback();
    } catch (SQLException ex) {
        ex.printStackTrace();
}

流程演示

package cn.luis.demo4.Commit;

import cn.luis.demo3.util.JDBCUtils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

/**
 * @ClassName JDBCDemo1
 * @Description 定义一个方法
 * @Author L
 * @Date 2020.01.18 10:34
 * @Version 1.0
 * @Remark 事务操作
 **/
public class JDBCDemo1 {

    public static void main(String[] args) {
        new JDBCDemo1().update();
    }

    /**
     * @Author Lius
     * @Description 练习 登录方法,事务操作 数据库是:db3 account
     * @Date 10:36 2020.01.18
     * @Param []
     * @Return java.util.List<cn.luis.demo2.domain.Emp>
     **/
    public void update() {
        Connection conn = null;
        PreparedStatement pstmt1 = null;
        PreparedStatement pstmt2 = null;

        try {
            //1.获取连接
            conn = JDBCUtils.getConnection();
            //开启事务
            conn.setAutoCommit(false);

            //2.定义sql
            //2.1 张三 - 500
            String sql1 = "update account set balance = balance - ? where id = ?";
            //2.2 李四 + 500
            String sql2 = "update account set balance = balance + ? where id = ?";
            //3.获取执行sql对象
            pstmt1 = conn.prepareStatement(sql1);
            pstmt2 = conn.prepareStatement(sql2);
            //4. 设置参数
            pstmt1.setDouble(1, 500);
            pstmt1.setInt(2, 1);

            pstmt2.setDouble(1, 500);
            pstmt2.setInt(2, 2);
            //5.执行sql
            pstmt1.executeUpdate();
            // 手动制造异常
//            int i = 3 / 0;

            pstmt2.executeUpdate();
            //提交事务
            conn.commit();
        } catch (SQLException e) {
            //事务回滚
            try {
                if (conn != null) { // 避免conn空指针异常
                    try {
                        conn.rollback();
                    } catch (SQLException ex) {
                        ex.printStackTrace();
                    }
                }
                e.printStackTrace();
            } finally {
                JDBCUtils.close(pstmt1, conn);
                JDBCUtils.close(pstmt1, null);
            }
        }
    }
}

http://www.niftyadmin.cn/n/1850138.html

相关文章

5.【数据库连接池】

概念 获取数据库连接的操作&#xff0c;是向系统底层申请资源的&#xff0c;是非常耗时的&#xff0c;为了避免资源浪费&#xff0c;我们使用连接池技术。 连接池&#xff1a;其实就是一个容器(集合)&#xff0c;存放数据库连接的容器。 当系统初始化好后&#xff0c;容器被…

C#之自动提交表单登录QQ空间...

本程序完整源码下载地址:http://download.csdn.net/download/friendan/4358792呵呵&#xff0c;用程序自动登录网站&#xff0c;那是我很想要的一个功能,用分析数据包&#xff0c;模拟发包的方式&#xff0c;难度不小...在网上找了很久&#xff0c;有关C#自动登录web的文章&…

6.【数据库连接池工具类】

搭建步骤 定义一个类提供静态代码块加载配置文件&#xff0c;初始化连接池对象提供方法 获取连接方法&#xff1a;通过数据库连接池获取连接释放资源获取连接池的方法 代码&#xff1a; package cn.luis.DataSource.util;import com.alibaba.druid.pool.DruidDataSourceFac…

Semantic Analysis

http://www.semanticsearchart.com/research.html转载于:https://www.cnblogs.com/stoneresearch/archive/2012/06/09/4336309.html

7.【Spring JDBC】

Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象&#xff0c;用来简化JDBC的开发。 步骤 1. 导入jar包&#xff08;5个&#xff09; commons-logging-1.2.jar spring-beans-5.0.0.RELEASE.jar spring-core-5.0.0.RELEASE.jar spring-jdbc-5.0.0.RELEASE.jar spr…

C语言链接属性与extern、static关键字

标识符的链接属性决定如何处理在不同文件中出现的标识符&#xff0c;链接属性有三种&#xff1a;external&#xff08;外部&#xff09;、internal&#xff08;内部&#xff09;和none&#xff08;无&#xff09;&#xff0c;没有链接属性的标识符&#xff08;none&#xff09;…

shell比较大小

自己测试的写下比较大小的脚本记录下定义a1b2if [ $a -eq $b ]; then echo "ab"; elif [ $a -gt $b ]; then echo "a>b"; elif [ $a -lt $b ]; then echo "a<b"; fi运行结果是a<b有个问题就是 if开头的[]&#xff0c;$a与[之间有空格&…

关键字、标识符、常量、变量

关键字、标识符、常量、变量、入门程序、数据类型转换、ASCII编码表 关键字 有特殊含义的、被保留的、不能随意使用的字符。 特点 完全小写的字母。如&#xff1a;public在编译器中有特殊颜色。 标识符 标识符&#xff1a;是指在程序中&#xff0c;我们自己定义内容。比如…