事务
事务(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 { |