事务:
在数据库执行一组操作(执行多条sql)保证这个操作 要么同时成功 要么同时执行失败
事务的原子性。。。。
事务的四大原则:
A:事务的原子性:执行操作 要么通知成功要么同时失败 (最小的原子单位)
C:事务的一致性:事务要么是执行前的状态,要么是执行后的状态
D:事务的隔离性:每一个事务都是相互独立 互不影响。
L:事务的持久性:只要是commit后数据就永远保存在数据库中
1.(MysqL数据库是自动提交事务 ,操作时必须修改为手动)
指令:set autocommit=0(手动) 1(自动)
2.开启事务:start transaction
3.回滚:rollback savepoint 名字 rollback to 回滚点 (设置回滚点)
事务的原理:事务开启 执行sql将结果写入临时文件中 只有commit提交后 数据才会保存到数据库中。
要点:设置为手动提交 setAutoCommit()方法 commit()方法 rollback()回滚方法 对象都是连接对象
public class Test01 {
public static void main(String[] args) {
Connection con =null;
try {
Class.forName("com.MysqL.jdbc.Driver");
con= DriverManager.getConnection("jdbc:MysqL://localhost:3306/day09?characterEncoding=utf-8","root","root");
con.setAutoCommit(false);
change(con,"张三",1500);
change(con,"李四",3500);
// System.out.println(1/0);
con.commit();
} catch (ClassNotFoundException e) {
e.printstacktrace();
try {
con.rollback();
} catch (sqlException ex) {
ex.printstacktrace();
}
} catch (sqlException e) {
e.printstacktrace();
}
}
//转账方法
public static void change(Connection con , String mname ,int mmoney ){
try {
String str ="update money set mmoney =? where mname=?";
PreparedStatement ps = con.prepareStatement(str);
ps.setInt(1,mmoney);
ps.setString(2,mname);
int a = ps.executeUpdate();
} catch (sqlException e) {e.printstacktrace();
}
}
}
事务在高并发会产生问题:使用事务的隔离级别:
1<2<3<4
1.未提交读:一个事务读取到另一个事务未提交的数据(脏读:读取到垃圾数据)
2.已提交读:事务只能读取已经提交的数据
3.可重复读:在读取事务时 其他事务不能够进行修改操作 可以执行增加操作:出现幻读
4.可串化:锁数据库表 只能一个数据库事务来进行操作
连接池:
1.不要手动创建连接,减轻服务七压力
2.避免反复创建和销毁 重复利用
3.连接不够 ,创建新连接 不会超过最大量
4.连接过多,销毁一定量连接
5.连接都由连接池管理
接口:DataSource 连接池
1.dbcp:tomcat服务器内置连接池
2.c3p0:Spring框架内置连接池
3.druip:阿里
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。