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