image.png
    image.png

    1. package com.itheima.jdbc;
    2. import java.sql.Connection;
    3. import java.sql.DriverManager;
    4. import java.sql.SQLException;
    5. import java.sql.Statement;
    6. /**
    7. * JDBC API 详解:Connection
    8. */
    9. public class JDBCDemo3_Connection {
    10. public static void main(String[] args) throws Exception {
    11. // 1. 注册驱动
    12. // Class.forName("com.mysql.jdbc.Driver"); // mysql5之后的驱动jar包,的注册驱动,可以不写了
    13. // 2. 获取连接:如果连接的是本机mysql并且端口是默认的3306 可以简化,(简化,就是端口号和ip不写)
    14. // 这里的127.0.0.1 可以写成localhost 不想要红色警告可以设置参数后面的键值对(前面加问号)
    15. // useSSL=false (Java的键值对是 键=值 这里不能有空格
    16. String url = "jdbc:mysql:///db1?useSSL=false"; // db1 是数据库名
    17. String userName = "root";
    18. String passWord = "123456";
    19. Connection connection = DriverManager.getConnection(url, userName, passWord);
    20. // 3. 定义sql
    21. String sql1 = "update account set money = 3000 where id = 1";
    22. String sql2 = "update account set money = 3000 where id = 2";
    23. // 4. 获取执行sql的对象statement statement是陈述的意思
    24. Statement stmt = connection.createStatement();
    25. try {
    26. // 开启事务(要么同时成功,要么同时失败)
    27. // 注释掉,不进行事务的处理
    28. connection.setAutoCommit(false); // 值为false代表手动提交
    29. // 将要执行的代码进行try/catch捕获异常, 对会出现异常的代码进行捕获后,回滚
    30. // 5. 执行sql
    31. int count1 = stmt.executeUpdate(sql1); // 受影响的行数
    32. // 6. 处理结果
    33. System.out.println(count1); // 输出1 代表一行数据被改变
    34. // 在这里制造一个异常
    35. // 5. 执行sql
    36. int count2 = stmt.executeUpdate(sql2); // 受影响的行数
    37. // 6. 处理结果
    38. System.out.println(count2); // 输出1 代表一行数据被改变
    39. // 提交事务:
    40. connection.commit(); // 默认自动提交(如果sql代码执行了sql代码块就会提交),但是前面设置了要手动提交
    41. } catch (Exception throwables) {
    42. // 如果有异常执行这里
    43. // 一旦执行错误,就进行事务的回滚
    44. connection.rollback();
    45. throwables.printStackTrace();
    46. }
    47. // 提交事务
    48. // 7. 释放资源 (有两个资源要释放,一个是Connection 一个是statement
    49. stmt.close(); // 先释放statement类的对象(因为他是后开的资源,所以先释放)
    50. connection.close(); // connection是先开的,所以后释放
    51. }
    52. }