事务 与 数据库连接池【c3p0】 与 DBUtiles的总结

1.事务

开启事务:start transaction;
回滚事务:rollback;
提交事务: commit;
关闭自动提交事务:setAutoCommit(false);
1.1事务的特性ACID【】
1.原子性【A】:事务包含的逻辑不可分割
一致性【C】:事务执行前后,数据完整性
隔离性【I】 :事务执行期间不受其他事务影响
持久性【D】:事务执行成功,则数据永久保存到磁盘上;
1.1.2.事务的安全隐患:
不考虑隔离级别设置:
【读】:
1.脏读:>>>一个事务读到另外一个事务还未提交的数据;
2.不可重复读:>>>一个事务读到了另外一个事务提交的数据,造成两次查询结果不一致;>>>解决:重复读:repeatable read;【默认】
3.幻读:一个事务读到另外一个事务已提交插入的数据,导致多次查询结果不一致。>>>>解决:Serializable【可串行化】最高级别
四个隔离级别的效率从高到低排列:
读未提交>读已提交>可重复读>可串行化
拦截程度相反

【写】:丢失更新
>>>解决:1.悲观锁;
======== 2.乐观锁

【mysql默认隔离级别:可重复读】
【oracle默认隔离级别:读已提交】
1.1.3在代码中使用事务的步骤

Connection conn = JDBCUtil.getConn();
conn.setAutoCommit(false);//关闭事务的自动提交
.....
conn.commit();//提交
conn.roolback();//回滚

2.数据库连接池

2.1DBCP连接池【了解】
dbcp创建dataSource方式:

BasicDataSource dataSource = new BasicDataSource();

2.1.1使用代码方式连接【了解】
将数据插入到bank下的account表中

public class demo1 {
	@Test
	public void dbcp(){
		Connection conn = null;
		PreparedStatement ps = null;
		try {
			//1.构建数据源对象
			BasicDataSource dataSource = new BasicDataSource();
			dataSource.setDriverClassName("com.mysql.jdbc.Driver");
			dataSource.setUrl("jdbc:mysql://localhost/bank");
			dataSource.setUsername("root");
			dataSource.setPassword("123456");
			//2.获得连接对象
			conn = dataSource.getConnection();
			String sql = "insert into account values(null,?,?)";
			ps = conn.prepareStatement(sql);
			ps.setString(1, "admin");
			ps.setInt(2, 20000);
			ps.executeUpdate();
		} catch (SQLException e) {
			e.printStackT
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值