微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JDBC(二)

事务:

  在数据库执行一组操作(执行多条sql)保证这个操作 要么同时成功 要么同时执行失败

  事务的原子性。。。。

  事务的四大原则:

  A:事务的原子性:执行操作  要么通知成功要么同时失败  (最小的原子单位)

  C:事务的一致性:事务要么是执行前的状态,要么是执行后的状态

  D:事务的隔离性:每一个事务都是相互独立 互不影响。

  L:事务的持久性:只要是commit后数据就永远保存在数据库

       1.(MysqL数据库自动提交事务 ,操作时必须修改为手动)

    指令:set autocommit=0(手动) 1(自动

  2.开启事务:start transaction

  3.回滚:rollback       savepoint 名字  rollback to 回滚点 (设置回滚点)

事务的原理:事务开启  执行sql将结果写入临时文件中  只有commit提交后 数据才会保存到数据库中。

      调用commit和rollback回清除临时文件

 

使用java代码操作事务:数据库中提交提交设置为自动

   要点:设置为手动提交 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 举报,一经查实,本站将立刻删除。

相关推荐