栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > Java

Java之JDBC事务代码案例

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java之JDBC事务代码案例

Java和大数据系列

注:大家觉得博客好的话,别忘了点赞收藏呀,本人每周都会更新关于人工智能和大数据相关的内容,内容多为原创,Python Java Scala SQL 代码,CV NLP 推荐系统等,Spark Flink Kafka Hbase Hive Flume等等~写的都是纯干货,各种顶会的论文解读,一起进步。
今天和大家分享一下Java之JDBC事务代码案例
#博学谷IT学习技术支持#


前言


​在我们今天要讲的数据库中的事务,就可以理解为一条或一组SQL语句,这个事务成功的执行的必要条件就是其中的SQL全部执行成功,如果其中的任一SQL执行失败(没有达到预期效果),则此次事务执行失败,所有的SQL都不会对数据库中的数据产生变更。
简单的说就是要么一起成功,要么一起失败。


一、使用步骤 1.创建一个简单的sql表,插入数据
create table aaa.account(
    aid int primary key ,
    aname varchar(20),
    money double
);

insert into  aaa.account (aid,aname,money) VALUES (1001,'zhangsan',1000);
insert into  aaa.account (aid,aname,money) VALUES (1002,'lisi',1000);

2.定义jdbc.properties文件
DriverClass=com.mysql.cj.jdbc.Driver
Url=jdbc:mysql://localhost:3306/aaa
Username=root
Password=12345678
3.定义JDBCUtils类
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

public class JDBCUtils {

    private static Properties map;
    private static String driverClass;
    private static String url;
    private static String username;
    private static String password;
    private static String sql;

    private JDBCUtils(){}
    //封装注册驱动.这里是mysql 8.0的版本
    static {
        try {
            InputStream inputStream =
                    JDBCUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");

            map = new Properties();
            map.load(inputStream);
            driverClass = map.getProperty("DriverClass");
            url = map.getProperty("Url");
            username = map.getProperty("Username");
            password = map.getProperty("Password");
            sql = map.getProperty("Sql");

            Class.forName(driverClass);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    //封装获得连接
    public static Connection getConnection(){
        try {

            return DriverManager.getConnection(url, username, password);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

}
4.定义一个事务的测试类
//事务案例
//1开启事务
//2提交事务
//3回滚事务

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

public class demo1 {
    public static void main(String[] args) {
        Connection connection = JDBCUtils.getConnection();
        try {
            //关闭事务的自动提交
            //默认情况下一条sql单独开启事务
            connection.setAutoCommit(false);

            PreparedStatement pst1 = connection.prepareStatement("update account set money = money -1000 where aname = 'zhangsan'");
            int rows1 = pst1.executeUpdate();

			//这里故意报个错,如果发生错误就整体运行失败,之前代码也不会执行,要么一起成功,要么一起失败。
            System.out.println(1 / 0);

            PreparedStatement pst2 = connection.prepareStatement("update account set money = money +1000 where aname = 'lisi'");
            int rows2 = pst2.executeUpdate();

            //提交事务
            if (rows1 == 1 && rows2 == 1) {
                connection.commit();
            }
        } catch (Exception e) {
            e.printStackTrace();
            //回滚事务
            try {
                connection.rollback();
            } catch (SQLException ex) {
                throw new RuntimeException(ex);
            }
        }

    }
}

总结

connection.setAutoCommit(false);
connection.commit();
connection.rollback();
事务其实非常简单,如果事务中发生错误就整体运行失败,之前sql代码也不会执行,要么一起成功,要么一起失败。一般就用这个。

转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1036538.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号