JDBC连接池技术

一.连接池技术

(1)Java语言通过JDBC技术访问数据库的基本过程是:

1.加载数据库驱动程序;

2.通过JDBC建立数据库连接;

3.访问数据库,执行SQL语句;

4.断开数据库连接。

(2)在Web应用程序开发中,使用这种模式访问数据库时,存在很多问题,为了解决这些问题,可以采用数据库连接池技术。

连接池实际上是在一个集合对象中存储一定数量的数据库连接对象。当程序需要使用数据库连接时,请求从池中获取一个空闲的连接,

程序使用完毕后再把连接放回池中重用。连接池通过重用连接的方法,减少了创建连接的系统开销,能够明显提高系统的数据库访问效率。

(3)为解决上述问题可以使用连接池技术,连接池实际上是一个集合对象中存储一定数量的数据库连接对象。

(4)在JSP技术中,一般是通过数据源来使用连接池,一个数据对象会被注册为web服务器的一个JNDI资源,

应使用程序通过JDNI获取数据源对象,再通过数据源对象取得数据库连接,连接池为数据源提供物理连接。

二.使用方法

(1)用文本编辑器打开c:\tomcat\conf\context.xml文件,在<Context></Context>元素内部添加如下的数据源配置代码:

(2)应用程序通过数据源取得数据库连接的基本过程是:利用上下文对象,根据JNDI名取得一个数据源对象,通过数据源对象取得一个连接。

(3)JNDI的全称是Java命名和目录接口(java naming and directory interface)他是sun公司提供的java命名和目录访问接口。

主要方法如下:

1.javax.naming.Context

这个方法提供的lookup方法能在JNDI上下文中查找一个命名对象,返回一个object对象

2.javax.naming.InitialContext

3.javax.sql.DtaSource

数据源是一个和物理连鸡翅相关联的工厂类Factory 伟世通Datasource对象,必须为之指定连接池,连接池为JNDI数据源提供物理连接;

三.实例分析

(1)写两个JSP页面,一个从连接池中取得连接查询pubs数据库的titles表,另一个使用JDBC驱动程序获得连接查询pubs数据库的titles表,

每个JSP页面执行查询语句500次,并通过查询分析器记录下相关的连接信息,比较两种数据库连接方式的数据库访问效率。

操作步骤如下:

第1步:定义连接池和数据源。用文本编辑器打开c:\tomcat\conf\context.xml文件,在<Context></Context>元素内部添加配置代码(内容上述有介绍省去)

第2步:新建JSP页面,用连接池方式访问pubs/titles表500次。

<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head>

<body>
<%@page import="javax.sql.*,javax.naming.*"%>
<%
long beginTime=System.currentTimeMillis();
int  n=500;
ResultSet rs=null;
Statement st=null;
Connection con=null;
for(int i=0;i<n;i++)
{
try
{
   Context ctx=new InitialContext();  //获得一个上下文对象
   DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/pubs");  //通过上下文对象在JNDI中查找指定名字的数据源
   con=ds.getConnection();//通过数据源获得一个连接池

   String sql="select title,type,price from titles ";
   st=con.createStatement();
   rs=st.executeQuery(sql);
   while(rs.next())
   {
     rs.getString("title");
	 rs.getString("type");
	 rs.getString("price");
   }
}
catch(Exception e)
{
  out.print(e.getMessage());
  }
  finally
  {
     if(rs!=null)
	   rs.close();
	 if(st!=null)
	   st.close();
	 if(con!=null)
	   con.close();
  }
}
long endTime=System.currentTimeMillis();
out.print("用连接池作500次查询耗时:"+(endTime-beginTime)+"毫秒");
%>
</body>
</html>

第3步:新建一个名为exam623.jsp 的JSP页面,用JDBC驱动程序直接访问pubs/titles表500次。

<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head>

<body>
<%@page import="javax.sql.*,javax.naming.*"%>
<%
long beginTime=System.currentTimeMillis();
int  n=500;
ResultSet rs=null;
Statement st=null;
Connection con=null;
for(int i=0;i<n;i++)
{
try
{
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
   String url="jdbc:sqlserver://localhost:1433;databaseName=pubs;user=sa;password=";
   con = DriverManager.getConnection(url);

   String sql="select title,type,price from titles ";
   st=con.createStatement();
   rs=st.executeQuery(sql);
   while(rs.next())
   {
     rs.getString("title");
	 rs.getString("type");
	 rs.getString("price");
   }
   rs.close();
   st.close();
   con.close();
}
catch(Exception e)
{
  out.print(e.getMessage());
  }
  finally
  {
     if(rs!=null)
	   rs.close();
	 if(st!=null)
	   st.close();
	 if(con!=null)
	   con.close();
  }
}
long endTime=System.currentTimeMillis();
out.print("直接用JDBC连接作500次查询耗时:"+(endTime-beginTime)+"毫秒");
%>
</body>
</html>

(2)这个不用多数,效果看得见!

注:希望大家在转载的时候注明出去!

时间: 2024-11-05 08:35:39

JDBC连接池技术的相关文章

JDBC数据库连接池技术

在JDBC中,获得连接或释放资源是非常消耗系统资源的两个过程,为了解决此类性能问题,通常采用连接池技术,来共享连接.这样我们就不需要每次都创建连接.释放连接了,这些操作都交给了连接池. 用池的概念来管理Connection,这样可以重复使用Connection.有了连接池以后就不用自己亲自创建连接而是通过连接池来获得Connection对象.当使用完Connection之后,调用Connection的close()方法不是真的将连接关闭,而是把Connection归还给连接池.连接池就可以继续保

数据层优化-jdbc连接池简述、druid简介

终于回到既定轨道上了,这一篇讲讲数据库连接池的相关知识,线程池以后有机会再结合项目单独写篇文章(自己给自己挖坑,不知道什么时候能填上),从这一篇文章开始到本阶段结束的文章都会围绕数据库和dao层的优化去写,本篇是一个开始.本文会介绍连接池技术并对比目前比较流行的java连接池技术,之后,会把druid整合到项目中来,将技术方案落地,实际整合到项目中,让技术能为我所用. 使用连接池的原因 jdbc的demo //第一步,注册驱动程序 //com.MySQL.jdbc.Driver Class.fo

连接池技术解密,连接池对我们不再陌生

一.为什么我们要用连接池技术? 前面的数据库连接的建立及关闭资源的方法有些缺陷.统舱传统数据库访问方式:一次数据库访问对应一个物理连接,每次操作数据库都要打开.关闭该物理连接, 系统性能严重受损. 解决方案:数据库连接池(Connection Pool).系统初始运行时,主动建立足够的连接,组成一个池.每次应用应用程序请求数据库连接时,无需重新打开连接,而是从池中取出已有的连接,使用完后,不再关闭,而是归还. 二.连接池主要由三部分组成:连接池的建立.连接池中连接的使用管理.连接池的关闭. 三.

JDBC连接池概述

Reference Source:https://www.progress.com/tutorials/jdbc/jdbc-jdbc-connection-pooling 介绍 本文档提供的信息旨在帮助开发人员为必须处理连接池的应用程序提供连接池策略. 首先, 本文档提供 jdbc 3.0 规范指定的 jdbc 连接池概述. 接下来, 它提供了一些示例, 说明如何使用 DataDirect 连接池管理器 (它随 DataDirect Connect?用于jdbc 和 DataDirect Seq

号称性能最好的JDBC连接池:HikariCP

HikariCP号称是现在性能最好的JDBC连接池组件,具体的性能到底如何,我也没有仔细的测试过,不过从它现在的发展来看,其可能确实如它宣传的那样其性能高过目前所有的连接池组件.之前对连接池的记忆一直都是C3P0.DBCP.BoneCP,这三者中BoneCP的性能是最好的,C3P0的性能在现在来说确实是非常差的了,好像C3P0很久都没有更新了,所以我们应该杜绝在项目中使用C3P0,至于是否要使用HikariCP,我觉得可以尝试.HikariCP毕竟是才出来不久,其性能到底如何,也需要实践的检验,

JDBC连接池的简单实现

先说明一下,我本身是做android开发的,java web是我的弱项,只是近来京东云免费,于是去折腾了几下,有了些许经验,特作分享.如果文章中内容有误,还请各高手指正. 我在web端,需要连接数据库进行查询插入等操作,但是每次进行操作都先获取连接用完后就断开的话,未免效率太低.以前知道tomcat中可以配置,但是京东云引擎的tomcat并不能由自己配置.因为我折腾的东西较小,所以也不考虑使用框架,于是就想自己写一个. 我写的连接池很简单,在初始化时创建5个连接,并放在一个列表当中.如果要获取连

使用了Tomcat JDBC连接池不能重连的问题

在项目中用到了tomcat 的jdbc连接池,发现一个问题是,当数据库重启时,服务没有重新的去连接数据库,需要将部署的项目重新启动才能连接到数据库.经过测试对配置做一下修改: 在配置dataSource的地方加入两个配置属性: <property name="testOnBorrow" value="true"/> <!--在连接返回给调用者前用于校验连接是否有效的SQL语句,如果指定了SQL语句,则必须为一个SELECT语句,且至少有一行结果--

JDBC连接池C3P0

连接池 1)传统方式找DriverManager要连接,数目是有限的. 2)传统方式的close(),并没有将Connection重用,只是切断应用程序和数据库的桥梁,即无发送到SQL命令到数据库端执行 3)项目中,对于Connection不说,不会直接使用DriverManager取得,而使用连接池方式. 4)DBCP和C3P0,都是Java开源的,都必须直接或间接实现javax.sql.DataSource接口 5)DBCP连接池需要dbcp.properties文件,同时需加入3个对应的j

Spring boot (11) tomcat jdbc连接池

默认连接池 tomcat jdbc是从tomcat7开始推出的一个连接池,相比老的dbcp连接池要优秀很多,spring boot将tomcat jdbc作为默认的连接池,只要在pom.xml中引入了spring boot的jdbc组件,就会自动引入tomcat jdbc连接池. 默认参数 以下是org.apache.tomcat.jdbc.pool.PoolProperties源码,这是tomcat jdbc连接池的默认初始参数.这个类实现了一个接口PoolConfiguration,查看这个