事务
transaction 事务指的是一组操作,里面包含许多个单一的逻辑,只要有一个逻辑没有执行成功,那么都算失败,所有的数据回到最初的状态(回滚)
*事务存在的意义
为了确保许多逻辑必须成功,例子,银行转账。
使用命令行演示事务
1 关闭自动提交功能
2演示事务
总结:
开启事务:
start transaction
提交事务或者回滚事务
commit ; 提交事务,数据将会写道磁盘上的数据库
rollback 数据回滚,回到最初的状态
使用代码方式实现
贴一个配置的时候遇到的问题:
Unknown initial character set index ‘255’ received from server. Initial client character set can be
package test;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import org.junit.jupiter.api.Test;
import uitl.JDBCUtil;
public class testDemo {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
@Test
public void testTransaction() {
try {
conn = JDBCUtil.getConn();
conn.setAutoCommit(false);
String sql = "update account set money = money -? where id = ?";
ps = conn.prepareStatement(sql);
ps.setInt(1, 100);
ps.setInt(2, 1);
ps.executeUpdate();
// rs = ps.executeQuery();
// while (rs.next()) {
// String name = rs.getString("name");
// int money = rs.getInt("money");
// System.out.println(name + " -- " + money);
//
// }
int a = 10 / 0;
ps.setInt(1, -100);
ps.setInt(2, 2);
ps.executeUpdate();
// 成功就提交
conn.commit();
} catch (Exception e) {
try {
// TODO: handle exception
//中间出现了问题,所以需要回滚
e.printStackTrace();
conn.rollback();
} catch (Exception e2) {
// TODO: handle exception
}
} finally {
JDBCUtil.release(conn, ps, rs);
}
}
}
代码里面的事务,主要是针对链接来的,通过
1 conn.setAutoCommit(false)