• JDBC操作事务


    目录

    一、使用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.创建数据

    1. CREATE TABLE account(
    2. id Int PRIMARY KEY AUTO_INCREMENT,
    3. NAME VARCHAR(40),
    4. money FLOAT
    5. );
    6. /*插入测试数据*/
    7. insert into account(name,money) values("A",1000);
    8. insert into account(name,money) values("B",1000);
    9. insert into account(name,money) values("C",1000);

    2.编写工具类

    1. import java.io.InputStream;
    2. import java.sql.*;
    3. import java.util.Properties;
    4. public class JdbcUtils {
    5. private static String driver=null;
    6. private static String url=null;
    7. private static String username=null;
    8. private static String password=null;
    9. static {
    10. try{
    11. InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties");
    12. Properties properties = new Properties();
    13. properties.load(in);
    14. driver=properties.getProperty("driver");
    15. url=properties.getProperty("url");
    16. username=properties.getProperty("username");
    17. password=properties.getProperty("password");
    18. Class.forName(driver);
    19. }catch (Exception e){
    20. e.printStackTrace();
    21. }
    22. }
    23. public static Connection getConnection() throws SQLException {
    24. return DriverManager.getConnection(url,username,password);
    25. }
    26. public static void release(Connection conn,Statement st,ResultSet rs){
    27. if(rs!=null){
    28. try {
    29. rs.close();
    30. } catch (SQLException e) {
    31. e.printStackTrace();
    32. }
    33. }
    34. if(st!=null){
    35. try {
    36. st.close();
    37. } catch (SQLException e) {
    38. e.printStackTrace();
    39. }
    40. }
    41. if(conn!=null){
    42. try {
    43. conn.close();
    44. } catch (SQLException e) {
    45. e.printStackTrace();
    46. }
    47. }
    48. }
    49. }

     3.编写测试语句

    1. import java.sql.*;
    2. public class Transaction01 {
    3. public static void main(String[] args) {
    4. Connection conn=null;
    5. PreparedStatement st=null;
    6. ResultSet rs=null;
    7. try {
    8. conn=JdbcUtils.getConnection();
    9. //关闭数据库的自动提交功能=自动开启事务
    10. conn.setAutoCommit(false);
    11. String sql1="update account set `money`=`money`-100 where `name`='A'";
    12. st=conn.prepareStatement(sql1);
    13. st.executeUpdate();
    14. String sql2="update account set `money`=`money`+100 where `name`='B'";
    15. st=conn.prepareStatement(sql2);
    16. st.executeUpdate();
    17. //业务完毕提交事务
    18. conn.commit();
    19. System.out.println("成功");
    20. } catch (SQLException e) {
    21. try {
    22. conn.rollback();//如果失败就回滚事务,默认自动回滚
    23. } catch (SQLException ex) {
    24. ex.printStackTrace();
    25. }
    26. e.printStackTrace();
    27. }
    28. finally {
    29. JdbcUtils.release(conn,st,rs);
    30. }
    31. }
    32. }

    测试成功:

    总结:

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

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

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

  • 相关阅读:
    鉴源论坛 · 观擎丨基于模型的方法在民机机载软件中的应用
    web前端——HTML(一看就会写自己的小网页)
    QStandardItmeModel
    微服务篇-B 深入理解SOA框架(Dubbo)_III SpringBoot整合Dubbo(学习总结)
    北京筑龙发声炼化企业大会,助力央国企采购供应链数字化转型
    ThreadLocal原理和使用场景
    python jieba 词性标注 中文词性分类 nlp jieba.posseg
    Java IO 中常用的目录和文件操作,用到的时候从这里拷贝就行了
    自动化测试与Jenkins持续集成实战
    Java与Redis的集成
  • 原文地址:https://blog.csdn.net/qq_61727355/article/details/126370465