JDBC操作事务

发布于:2023-01-15 ⋅ 阅读:(457) ⋅ 点赞:(0)

目录

一、使用idea连接数据库

二、实现对事务的操作 


一、使用idea连接数据库

1.点击侧边栏‘Database’中的‘+’号

如果没有此侧边栏的话,可以点击左下角类窗口图标,查看是否进行了折叠

2.在‘Data Source’中选择需要的数据库类型,这里以MySQL为例

 3.输入用户名密码,可测试是否连接成功

 4.选择连接至哪个库

直接勾选需连接的对象即可

 5.选中一个表双击便可显示其内容

 6.调出console执行SQL语句

二、实现对事务的操作 

  • 事务:一个包含多个步骤的业务操作。 如果这个业务操作被事务管理,则这多个步骤要么同时成功,要么同时失败
  • 操作:开启事务   ->   提交事务   ->   回滚事务
  • 使用 Connection 对象来管理事务
  • 开启事务:setAutoCommit(boolean autoCommit):调用该方法设置参数为 false, 即关闭数据库的自动提交功能=自动开启事务
  • 在执行 sql 之前开启事务
  • 提交事务:commit()
  • 当所有 sql 执行完提交事务
  • 回滚事务:
    • rollback()   [在 catch 中回滚事务]

1.创建数据

CREATE TABLE account(
  id Int PRIMARY KEY AUTO_INCREMENT,
  NAME VARCHAR(40),
  money FLOAT
);

/*插入测试数据*/
insert into account(name,money) values("A",1000);
insert into account(name,money) values("B",1000);
insert into account(name,money) values("C",1000);

2.编写工具类

import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

public class JdbcUtils {
    private static String driver=null;
    private static String url=null;
    private static String username=null;
    private static String password=null;

    static {
        try{
            InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties");
            Properties properties = new Properties();
            properties.load(in);

            driver=properties.getProperty("driver");
            url=properties.getProperty("url");
            username=properties.getProperty("username");
            password=properties.getProperty("password");

            Class.forName(driver);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(url,username,password);
    }

    public static void release(Connection conn,Statement st,ResultSet rs){
        if(rs!=null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(st!=null){
            try {
                st.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

 3.编写测试语句

import java.sql.*;

public class Transaction01 {
    public static void main(String[] args) {
        Connection conn=null;
        PreparedStatement st=null;
        ResultSet rs=null;

        try {
            conn=JdbcUtils.getConnection();
            //关闭数据库的自动提交功能=自动开启事务
            conn.setAutoCommit(false);

            String sql1="update account set `money`=`money`-100 where `name`='A'";
            st=conn.prepareStatement(sql1);
            st.executeUpdate();
            String sql2="update account set `money`=`money`+100 where `name`='B'";
            st=conn.prepareStatement(sql2);
            st.executeUpdate();

            //业务完毕提交事务
            conn.commit();
            System.out.println("成功");
        } catch (SQLException e) {
            try {
                conn.rollback();//如果失败就回滚事务,默认自动回滚
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
            e.printStackTrace();
        }
        finally {
            JdbcUtils.release(conn,st,rs);
        }
    }
}

测试成功:

总结:

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

一组事务执行完毕,提交事务

可以在catch语中显示的定义回滚语句,但默认失败就会回滚

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到