连接池笔记
来源:互联网 发布:手机淘宝体验中心在哪 编辑:程序博客网 时间:2024/06/15 06:22
问题:连接池是什么,有什么用?
连接池: 就是创建一个容器,用于装入多个Connection对象,在使用连接对象时,从容器中获取一个Connection, 使用完成后,在将这个Connection重新装入到容器中。这个容器就是连接池,也叫做数据源
我们可以通过连接池获取连接对象.
优点:
节省创建连接与释放连接 性能消耗 —- 连接池中连接起到复用的作用 ,提高程序性能
———————————————————————————–
自定义连接池
1.创建一个MyDataSource类,在这个类中创建一个LinkedList Connection2.在其构造方法中初始化List集合,并向其中装入5个Connection对象。3.创建一个public Connection getConnection();从List集合中获取一个连接对象返回.4.创建一个 public void readd(Connection) 这个方法是将使用完成后的Connection对象重新装入到List集合中.
代码问题:
1.连接池的创建是有标准的.
在javax.sql包下定义了一个接口 DataSource 简单说,所有的连接池必须实现javax.sql.DataSource接口,我们的自定义连接池必须实现DataSource接口。
2.我们操作时,要使用标准,怎样可以让 con.close()它不是销毁,而是将其重新装入到连接池.
要解决这个问题,其本质就是将Connection中的close()方法的行为改变。
怎样可以改变一个方法的行为(对方法功能进行增强)
1.继承2.装饰模式 1.装饰类与被装饰类要实现同一个接口或继承同一个父类 2.在装饰类中持有一个被装饰类引用 3.对方法进行功能增强。3.动态代理 可以对行为增强 Proxy.newProxyInstance(ClassLoacer,Class[],InvocationHandler);
结论:Connection对象如果是从连接池中获取到的,那么它的close方法的行为已经改变了,不在是销毁,而是重新装入到连接池。
——————————————————————–
1.连接池必须实现javax.sql.DataSource接口。2.要通过连接池获取连接对象 DataSource接口中有一个 getConnection方法.3.将Connection重新装入到连接池 使用Connection的close()方法。开源连接池
1.dbcp(了解)
dbcp是apache的一个开源连接池。 要想使用DBCP连接池,要下载jar包导入时要导入两个 commons-dbcp-1.4.jar commons-pool-1.5.6.jar
关于dbcp连接池使用
1.手动配置(手动编码)
BasicDataSource bds = new BasicDataSource();// 需要设置连接数据库最基本四个条件 bds.setDriverClassName("com.mysql.jdbc.Driver"); bds.setUrl("jdbc:mysql:///day18"); bds.setUsername("root"); bds.setPassword("abc");// 得到一个Connection Connection con = bds.getConnection();2.自动配置(使用配置文件) Properties props = new Properties(); FileInputStream fis = new FileInputStream("D:\\java1110\\workspace\\day18_2\\src\\dbcp.properties"); props.load(fis);DataSource ds = BasicDataSourceFactory.createDataSource(props);
2.c3p0(必会)
C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。 目前使用它的开源项目有Hibernate,Spring等。
c3p0与dbcp区别
dbcp没有自动回收空闲连接的功能 c3p0有自动回收空闲连接功能
c3p0连接池使用
导包 c3p0-0.9.1.2.jar
1.手动
ComboPooledDataSource cpds = new ComboPooledDataSource(); cpds.setDriverClass("com.mysql.jdbc.Driver"); cpds.setJdbcUrl("jdbc:mysql:///day18"); cpds.setUser("root"); cpds.setPassword("abc");
2.自动(使用配置文件)
c3p0的配置文件可以是properties也可以是xml.c3p0的配置文件如果名称叫做 c3p0.properties or c3p0-config.xml 并且放置在classpath路径下(对于web应用就是classes目录)那么c3p0会自动查找。注意:我们其时只需要将配置文件放置在src下就可以。使用:
ComboPooledDataSource cpds = new ComboPooledDataSource();
它会在指定的目录下查找指定名称的配置文件,并将其中内容加载。
3.tomcat内置连接池管理
tomcat内置连接池使用的是dbcp。
问题1:tomcat怎样管理连接池?(配置)
要想将一个dbcp连接池让 tomcat管理,只需要创建一个context.xml配置文件,在配置文件中配置相关信息,
<Context> <Resource name="jdbc/EmployeeDB" auth="Container" type="javax.sql.DataSource" username="root" password="abc" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql:///day18" maxActive="8" maxIdle="4"/></Context>
问题:context.xml文件位置:
1.在tomcat/conf/context.xml 这时这个连接池是给整个服务器使用的。2.在tomcat/conf/Catalina/localhost 这时这个连接池只给localhost虚拟主机使用。3.将context.xml文件放置在web应用的META-INF下
注意:如果是全局设置,那么我们需要将数据库驱动放置在tomcat/lib目录下
问题2:怎样从tomcat中获取连接池?
我们在servlet中获取连接池对象。
Context context = new InitialContext();Context envCtx = (Context)context.lookup("java:comp/env"); 固定路径DataSource datasource =(DataSource)envCtx.lookup("jdbc/EmployeeDB");
JNDI—–>
JNDI(Java Naming and Directory Interface,Java命名和目录接口)是SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的访问提供者接口JNDI SPI的实现,由管理者将JNDI API映射为特定的命名服务和目录系统,使得Java应用程序可以和这些命名服务和目录服务之间进行交互。目录服务是一种命名服务,在这种服务里,对象不但有名称,还有属性。
Dbutil框架
ResulsetHandler九个实现类
QueryRunner
QueryRunner怎样获取
1. new QueryRunner() 如果是使用这种构造创建的QueryRunner,它的事务是手动控制. 2. new QueryRunner(DataSource ds); 如果是使用这种构造,它的事务是自动事务,简单说,一条sql一个事务。
更新操作
• public int update(Connection conn, String sql, Object... params)• public int update(String sql, Object... params)
查询操作
• public Object query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params)• public Object query(String sql, ResultSetHandler<T> rsh, Object... params)
ResulsetHandler九个实现类
- ArrayHandler, 将结果集中第一条记录封装到Object[],数组中的每一个元素就是记录中的字段值。 - - ArrayListHandler, 将结果集中每一条记录封装到Object[],数组中的每一个元素就是记录中的字段值。在将这些数组装入到List集合。 - BeanHandler(重点), 将结果集中第一条记录封装到一个javaBean中。 - BeanListHandler(重点), 将结果集中每一条记录封装到javaBean中,在将javaBean封装到List集合. - ColumnListHandler, 将结果集中指定列的值封装到List集合. MapHandler,将结果集中第一条记录封装到Map集合中,集合的 key就是字段名称,value就是字段值 - MapListHandler, 将结果集中每一条记录封装到Map集合中,集合的key就是字段名称,value就是字段值,在将这些Map封装到List集合 - KeyedHandler,在使用指定的列的值做为一个Map集合的key,值为每一条记录的Map集合封装。 - ScalarHandler 进行单值查询 select count(*) from account;
1 0
- dbcp连接池笔记
- 连接池笔记
- 关于连接池的笔记
- tomcat连接池学习笔记
- proxool 连接池 配置笔记
- 连接池c3p0学习笔记
- 笔记--事物和连接池
- 连接笔记
- 关于tomcat 使用连接池连接mysql的笔记..
- Hibernate笔记=>连接池配置
- Hibernate笔记=>连接池配置
- DBCP 数据库连接池JNDI连接 学习笔记
- Mybatis学习笔记-数据源与连接池
- Druid连接池一(学习笔记)
- Druid连接池二(学习笔记)
- Druid连接池三(学习笔记)
- Druid连接池四(学习笔记)
- 【学习笔记】配置C3P0连接池
- word-wrap与word-break的区别
- 【hpuoj】防ak问题
- LintCode - 365.二进制中有多少个1
- AIDL基础再接触
- MFC 判断Windows某一进程是否在运行以及处理
- 连接池笔记
- 有关EOF
- LA4487 Exclusive-OR
- @JoinColumn 详解
- Spring Cache的原理和简单实现
- 亲密数
- 欢迎使用CSDN-markdown编辑器
- as3效率优化
- MFC匹配字符获取字符串