javaee分校课件笔记java学院-jdbc的连接池_第1页
javaee分校课件笔记java学院-jdbc的连接池_第2页
javaee分校课件笔记java学院-jdbc的连接池_第3页
javaee分校课件笔记java学院-jdbc的连接池_第4页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、连接池1.1 数据库的连接池:1.1.1连接池的概述:连接池:连接池的优点:使用连接池:编写接池:编写一个类实现DataSource 接口.初始化连接池这个类的时候,初始化一些连接.将创建的连接保存到集合中.获得连接从集合中获取,使用完毕后归还连接.自定义连接池:/*自定义连接池:*/public class MyDataSource implements DataSource/ 创建一个List 集合:用来保存连接:privaist list = new ArrayList();/*构造方法:*/public MyDataSource()/ 向连接池中初始化三个连接:for (i = 1;

2、i =3 ; i+) Connection conn = JDBCUtils.getConnection();/ 将连接保存到集合中. list.add(conn);程序的性能.对程序进行优化.连接池:就是一个装有很多连接的一个容器.使用连接的时候,直接可以从连接池中获取.用完以后归还给连接池.:自定义连接池中虽然自定义连接池,但是自定义连接池是有问题:1.使用的具体的连接池进行构造,能不能使用接口构造.* DataSource dataSource = new MyDataSource();2.开发以及掌握了JDBC 的常用的方法,额外提供了自定义连接池的一些方法:addBack();增加了

3、程序员压力.解决这两个问题:Connection 对象中close 方法:对Connection 进行销毁.* 现在能不能将原有的 close 逻辑修改了.原来是销毁,现在归还.* 要去增强一个类中的某个方法:* 1.继承:(最简单):条件:这个类需要能够控制其构造.class Manpublic void run() System.out.prln(跑.);clasperMan extends ManOverride/* 连接池获得连接方法:*/public Connection getConnection() throws SQLException / 判断集合中的连接是否为null. i

4、f(list.isEmpty() | list.size() = 0)for (i = 1; i = 3; i+) list.add(JDBCUtils.getConnection();/ 使用get 方法不可以.应该使用remove 的方法 Connection conn = list.remove(0); return conn;/ 将连接归还到连接池的方法:public void addBack(Connection conn) list.add(conn);.public void run() System.out.prln(增强的跑方法.);* 2.装饰者模式:* 使用条件:* 1.

5、被增强的类和增强的类实现相同的接口.* 2.在增强类中获得到被增强的类的.erface Bird public void fly();class SmallBird implements BirdOverridepublic void fly() System.out.prln(飞.);class SmallBirdWrapper implementsBirdprivate Bird bird;public SmallBirdWrapper(Bird bird) this.bird = bird;Overridepublic void fly() / bird.fly(); System.ou

6、t.prln(增强的飞的方法.);* 缺点:接口中方法过多.增强了其中的某个方法.其他的方法需要原封调用.* 3.动态:1.2 开源的数据库连接池(*)1.2.1DBCP:DBCP:使用 DBCP手动方式配置连接池:Test/*DBCP 的测试类:* 手动方式配置连接池:*/public void demo1() Connection conn = null; PreparedSement stmt = null; ResultSet rs = null;try / 创建连接池:BasicDataSource dataSource = new BasicDataSource();/ 手动设置参

7、数:dataSouretDriverClaame(com.jdbc.Driver); dataSouretUrl(jdbc:/web018);dataSouretUsername(root);dataSouretPassword(123);步骤一:DBCP 的开发包.commons-dbcp-1.4.jarcommons-pool-1.5.6.jar步骤二:了解DBCP 的API:BasicDataSource:用于手动配置DBCP 连接池.BasicDataSourceFactory:使用配置文件的方式配置连接池.DBCP:DBCP(DataBase connection pool),数据库

8、连接池。是 apache 上的一个 java 连接池项目,也是tomcat 使用的连接池组件。单独使用dbcp 需要 2 个包:comons-pool.jar 由于建立数据库连接是一个非常耗时耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去。通过配置文件的方式配置连接池:步骤一:在src 下提供一个属性文件:perties d.jdbc.Driver url=jdbc:/web018username=root password=123步骤二:使用DBCP 的连接池: Test/*DBCP 的测试类:* 测试

9、配置文件的方式配置连接池*/public void demo2() Connection conn = null;PreparedSement stmt = null; ResultSet rs = null;try / 创建属性文件对象Properties properties = new Properties();/ 获得代表属性文件的输入流;InputStream is = DBCPDemo1.class.getClassLoader().getResourceAsStream(perties);/ 获得连接:conn = dataSource.getConnection();/ 编写S

10、QL:String sql = select * from account;/ 预编译SQL:stmt = conn.prepareSement(sql);/ 执行SQL:rs = stmt.executeQuery();/ 遍历结果集:while (rs.next() System.out.prln(rs.get(id) + + rs.getString(name) + + rs.getDouble(money); catch (Exception e) e.prStackTrace(); finally JDBCUtils.release(rs, stmt, conn);1.2.2C3P0

11、(*):C3P0:使用 C3P0 连接池:手动方式配置 C3P0 连接池:Test步骤一:C3P0 开发包:* c3p0-.jar步骤二:了解C3P0 的API:* ComboPooledDataSourceC3P0 是一个开源的JDBC 连接池,它实现了数据源和JNDI 绑定,支持 JDBC3 规范和 JDBC2 的标准扩展。目前使用它的开源项目有Hibernate,Spring 等。properties.load(is);/ 创建连接池:DataSource dataSource = BasicDataSourceFactory.createDataSource(properties);/

12、 获得连接:conn = dataSource.getConnection();/ 编写SQL:String sql = select * from account;/ 预编译SQL:stmt = conn.prepareSement(sql);/ 执行SQL:rs = stmt.executeQuery();/ 遍历结果集:while (rs.next() System.out.prln(rs.get(id) + + rs.getString(name) + + rs.getDouble(money); catch (Exception e) e.prStackTrace(); finall

13、y JDBCUtils.release(rs, stmt, conn);配置文件的方式配置 C3P0 连接池:Test/* 配置文件的方式配置C3P0 连接池:*/public void demo2() Connection conn = null;PreparedSement stmt = null;/* 手动配置C3P0 连接池:*/public void demo1() Connection conn = null;PreparedSement stmt = null; ResultSet rs = null;try / 创建连接池:ComboPooledDataSource dataS

14、ource = new ComboPooledDataSource();/ 设置连接池的基本参数:dataSouretDriverClass(com.jdbc.Driver); dataSouretJdbcUrl(jdbc:/web018); dataSouretUser(root);dataSouretPassword(123);/ 获得连接:conn = dataSource.getConnection();/ 编写SQL:String sql = select * from account;/ 预编译SQL:stmt = conn.prepareSement(sql);/ 执行SQL;r

15、s = stmt.executeQuery(); while (rs.next() System.out.prln(rs.get(id) + + rs.getString(name)+ + rs.getDouble(money); catch (Exception e) e.prStackTrace(); finally JDBCUtils.release(rs, stmt, conn);使用 C3P0 连接池改造 JDBC 的工具类:public class JDBCUtils2 private sic ComboPooledDataSource dataSource = new Combo

16、PooledDataSource();/* 获得连接的方法*/public sic Connection getConnection() Connection conn = null;try conn = dataSource.getConnection(); catch (SQLException e) e.prStackTrace();return conn;/* 提供资源的方法*/ResultSet rs = null; try / 创建连接池:ComboPooledDataSource dataSource = new ComboPooledDataSource();/ 获得连接:co

17、nn = dataSource.getConnection();/ 编写SQL:String sql = select * from account;/ 预编译SQL:stmt = conn.prepareSement(sql);/ 执行SQL;rs = stmt.executeQuery(); while (rs.next() System.out.prln(rs.get(id) + + rs.getString(name)+ + rs.getDouble(money); catch (Exception e) e.prStackTrace(); finally JDBCUtils.rele

18、ase(rs, stmt, conn);public sic void release(Sementstmt,Connectionconn)if (stmt != null) try stmt.close(); catch (SQLException e) e.prStackTrace();stmt = null;if (conn != null) try conn.close(); catch (SQLException e) e.prStackTrace();conn = null;public sic void release(ResultSetrs,Sementstmt,Connect

19、ionconn)if(rs != null) try rs.close(); catch (SQLException e)e.prStackTrace();rs = null;if(stmt != null) try stmt.close(); catch (SQLException e)e.prStackTrace();stmt = null;if(conn != null) try conn.close(); catch (SQLException e)e.prStackTrace();1.2.3Tomcat 内置 JNDI 连接池:(了解)JNDI:名系统接口,JNDI 提供的客户端AP

20、I,通过不同的提供者接口JNDI 服务供应接口(SPI)的实现,由管理者将JNDIAPI为特定名服务和目录系统,使得 Java 应用程序可以和这些命名服务和目录服务之间进行交互。Tomcat 内置连接池:配置 JNDI 连接池:步骤一:配置context.xml.在META-INF/context.xml需要进行一个配置:配置一个.完成一个类与名称的绑定.配置的位置:tomcat/conf/context.xml- 配置连接池.可以被tomcat 下的所有虚拟主机和所有的虚拟路径.tomcat/conf/Catalina/localhost/context.xml- 配置连接池.可以tomca

21、t 下的localhost 虚拟主机下的所有应用.工程/META-INF/context.xml- 配置连接池.只能够被当前的工程所.将一个对象与一个名称进行绑定,通过名称查找到指定的对象.JNDI(Java Naming and Directoryerface,Java 命名和目录接口)是 SUN 公司提供的一种标准的Java 命conn = null;步骤二:连接池由Tomcat 服务器进行的.启动Tomcat 的时候,需要获得连接.需要创建连接池.能够获得驱动.需要将* 需要将驱动交给Tomcat 进行管理.的驱动包copy 到tomcib步骤三:定义个能够运行在Tomcat的类到连接池

22、:*Servlet!public class JNDIServlet extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException Connection conn = null; PreparedSement stmt = null; ResultSet rs = null;try Context initCtx = new InitialContext();Context envCtx = (Context) initCtx.lookup(/ 通过名称查询类对象.DataSource dat

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论