java三十三天---dbcp、c3p0连接池,以及DBtuils工具类,JDBC批处理,JDBC 调用存储过程和自定义函数 ,获取自增长键的值,事务

1 连接池概述

连接池概述:
         管理数据库的连接,
作用:
         提高项目的性能.
         就是在连接池初始化的时候存入一定数量的连接,用的时候通过方法获取,不用的时候归还连接即可.
常用连接池:
    DBCP
    C3P0

2  Dbcp连接池

硬编码

java三十三天---dbcp、c3p0连接池,以及DBtuils工具类,JDBC批处理,JDBC 调用存储过程和自定义函数 ,获取自增长键的值,事务

通过配置文件连接

java三十三天---dbcp、c3p0连接池,以及DBtuils工具类,JDBC批处理,JDBC 调用存储过程和自定义函数 ,获取自增长键的值,事务

java三十三天---dbcp、c3p0连接池,以及DBtuils工具类,JDBC批处理,JDBC 调用存储过程和自定义函数 ,获取自增长键的值,事务

 

3 c3p0连接池(相比于dbcp连接池有自动回收空闲连接的功能.)

要求

要求1:配置文件的名称:c3p0.properties 或者 c3p0-config.xml
要求2:配置文件的路径:src下
                

硬编码

java三十三天---dbcp、c3p0连接池,以及DBtuils工具类,JDBC批处理,JDBC 调用存储过程和自定义函数 ,获取自增长键的值,事务

通过配置文件连接

java三十三天---dbcp、c3p0连接池,以及DBtuils工具类,JDBC批处理,JDBC 调用存储过程和自定义函数 ,获取自增长键的值,事务

java三十三天---dbcp、c3p0连接池,以及DBtuils工具类,JDBC批处理,JDBC 调用存储过程和自定义函数 ,获取自增长键的值,事务

 

4 DButils工具类(是apache组织的一个工具类,jdbc的框架,更方便我们使用)

DButils里面的QueryRunner:类
      
 作用:操作sql语句
        构造器:
                       new QueryRunner(
new ComboPooledDataSource());
        注意:
                     
 底层帮我们创建连接,创建语句执行者 ,释放资源.
        常用方法:
            query(..):
            update(..):

java三十三天---dbcp、c3p0连接池,以及DBtuils工具类,JDBC批处理,JDBC 调用存储过程和自定义函数 ,获取自增长键的值,事务

 

5 JDBC批处理

java三十三天---dbcp、c3p0连接池,以及DBtuils工具类,JDBC批处理,JDBC 调用存储过程和自定义函数 ,获取自增长键的值,事务

6 JDBC 调用存储过程和自定义函数 CallableStatement

java三十三天---dbcp、c3p0连接池,以及DBtuils工具类,JDBC批处理,JDBC 调用存储过程和自定义函数 ,获取自增长键的值,事务

存储过程

java三十三天---dbcp、c3p0连接池,以及DBtuils工具类,JDBC批处理,JDBC 调用存储过程和自定义函数 ,获取自增长键的值,事务

java三十三天---dbcp、c3p0连接池,以及DBtuils工具类,JDBC批处理,JDBC 调用存储过程和自定义函数 ,获取自增长键的值,事务

java三十三天---dbcp、c3p0连接池,以及DBtuils工具类,JDBC批处理,JDBC 调用存储过程和自定义函数 ,获取自增长键的值,事务

自定义函数

java三十三天---dbcp、c3p0连接池,以及DBtuils工具类,JDBC批处理,JDBC 调用存储过程和自定义函数 ,获取自增长键的值,事务

java三十三天---dbcp、c3p0连接池,以及DBtuils工具类,JDBC批处理,JDBC 调用存储过程和自定义函数 ,获取自增长键的值,事务

 

7  获取自增长键的值

java三十三天---dbcp、c3p0连接池,以及DBtuils工具类,JDBC批处理,JDBC 调用存储过程和自定义函数 ,获取自增长键的值,事务



事务

java三十三天---dbcp、c3p0连接池,以及DBtuils工具类,JDBC批处理,JDBC 调用存储过程和自定义函数 ,获取自增长键的值,事务

9 事务的隔离级别

不考虑隔离性会出现的读问题★★
		脏读:在一个事务中读取到另一个事务没有提交的数据
		
		不可重复读:在一个事务中,两次查询的结果不一致(针对的update操作)  不可重复读,是指在数据库访问中,一个事务范围内两个相同的查询却返回了不同数据。
		虚读(幻读):在一个事务中,两次查询的结果不一致(针对的insert操作) 无法演示出来,MySQL已经默认避免了

		MySQL 有四种隔离级别

	通过设置数据库的隔离级别来避免上面的问题(理解)
		read uncommitted  	读未提交	上面的三个问题都会出现
		read committed  	读已提交	可以避免脏读的发生 Oracle 默认界别
		repeatable read		可重复读	可以避免脏读和不可重复读的发生  MySQL 默认级别
		serializable		串行化		可以避免所有的问题
	了解
		演示脏读的发生:
			将数据库的隔离级别设置成 读未提交
				set session transaction isolation level read uncommitted;
			查看数据库的隔离级别
				select @@tx_isolation;
			演示:
			打开两个窗口进行演示:给两个窗口设置好同的隔离级别
			开启事务  start transaction;
			修改数据:update bank set money=1500 where username='lisi';
			让另一个窗口开启事务 查询数据 他查到了  就是脏读
			我这边窗口 一回滚(rollback),钱又没过去
		避免脏读的发生,将隔离级别设置成  读已提交
			set session transaction isolation level read committed;
			不可避免不可重复读的发生.
		
		避免不可重复读的发生 经隔离级别设置成 可重复读
			set session transaction isolation level  repeatable read;
			
		演示串行化 可以避免所有的问题
			set session transaction isolation level  serializable;  我这边的事务不提交,那边的事务无法执行
			锁表的操作. 
		
	四种隔离级别的效率
		read uncommitted>read committed>repeatable read>serializable
	四种隔离级别的安全性
		read uncommitted<read committed<repeatable read<serializable
		
	开发中绝对不允许脏读发生.
		mysql中默认级别:repeatable read
		oracle中默认级别:read committed

	java中控制隔离级别:(了解)
		Connection的api
			void setTransactionIsolation(int level) 
				level是常量