事务
事务(Transaction,简写为tx)
1.当一个逻辑操作单元全部完成的时候,提交(commit)事务,这个操作就永久的保存到数据库中
2.如果回退(rollback),则放弃这个逻辑单元的所有操作
3.对于多个操作来说,作为一个整体(不可分割),所有操作成功(提交事务),数据库的数据才会改变
事务的ACID属性
1.原子性(Atomicity)
2.一致性(Consistency)
3.隔离性(Isolation)
4.持久性(Durability)
事务的操作
1.如果要控制事务,需要手动提交
2.在MySQL中,只有InnoDB存储引擎支持事务1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45package me.cscar.account.test;
import me.cscar.account.dao.impl.AccountDAOimpl;
import me.cscar.account.util.JDBCutil;
import org.junit.Test;
import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.SQLException;
public class TXBalance {
    
    public void testTx() throws Exception {
        BigDecimal money = new BigDecimal("1000");
        AccountDAOimpl account = AccountDAOimpl.getInstance();
        Connection conn = null;
        try {
            if (account.getBalance("嘤嘤", money)) {
                conn = JDBCutil.getConnection();
                //设置手动处理事务
                conn.setAutoCommit(false);
                account.addBalance("蛤蛤", money, conn);
                //假设出错
                int i = 1 / 0;
                account.reduceBalance("嘤嘤", money, conn);
                //全部操作成功,提交事务
                conn.commit();
            }
        } catch (SQLException e) {
            e.printStackTrace();
            conn.rollback();
        }
    }
}
获取自动生成的主键
在数据库中保存数据的时候,要使用到自增id的时候就需要取出来.
1.如果要获取,需要设置一个标记.
    PreparedStatement prepareStatement(String sql,  int autoGeneratedKeys):获取预编译语句对象的时候,可以设置标记,是否要获取自动生成的主键.
    autoGeneratedKeys: 是否要获取自动生成的主键.
        Statement.RETURN_GENERATED_KEYS
2.获取自动生成的主键.
    ResultSet getGeneratedKeys(): 获取自动生成的主键.
| 1 | public class GetKey { |