连接池技术
连接池简介
- 通常情况下每访问一次数据库都要建立数据库的连接,当需要多次连接数据库的项目时就会消耗一定的资源,并延长了访问数据库的时间,当访问量较高时会影响系统的性能。所以连接池诞生了。所谓连接池就是一个容器,里面预先已经创建了几个连接了,当要连数据库时,直接调用连接池。连接池会自动分配接口来连接数据库,不需要频繁的建立连接。连接池还解决了数据库连接数量限制问题。它能有效的管理和调度多个连接池中的连接,从而解决数据库连接数量限制问题
- 连接处的原理过程
(1)预先创建一定数量的连接池,存放在连接池中
(2)当程序请求一个连接时,连接池会为该请求分配一个空闲的连接,为不是重新建立一个连接,当使用完连接后,该连接会重新回到连接池中,而不是直接释放
(3)当连接池中空闲的连接数低于下限时,连接池的管理机制会自动追加一定数量的连接,当空闲数量高于上限时,连接池会释放一定数量的连接接口 - 连接池的优点
(1)节省时间
(2)提高了数据库的重复率
(3)解决了数据库对连接数的数量限制 - 连接池的缺点
(1)一定程度上浪费资源
(2)要求开发人员准确估算提高的最大连接数的数量
在tomcat中配置连接池
- DCPC连接池技术
(1)将所需的jar包复制到lib目录下
mysql的jar包,DCPC的jar包,C3P0的jar包的等
(2)配置数据源,即配置context.xml文件。可以在tomcat的安装目录的conf\server.xml文件中,也可以在Web工程的MWTA-INF\context.xml文件中,建议后者,应为这样更具有针对性,SQLServer为例:
<Context>
<Resource name="TestJNDI" type="javax.sql.DataSource" auth="Container"
driverClassName="com.microssft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=db_db_database"
username="root" password="123456" maxActive="4" maxIdle="2" maxWait="6000" />
</Context>
- C3P0连接池技术
C3P0的配置文件在web.xml中配置,可以定义多种数据库连接
//一个C3P0实例,只有修改自己相应的数据库信息,和一些细节就好了
<c3p0-config>
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">
jdbc:mysql://localhost:3306/jdbc
</property>
<property name="user">root</property>
<property name="password">itcast</property>
<property name="checkoutTimeout">30000</property>
<property name="initialPoolSize">10</property>
<property name="maxIdleTime">30</property>
<property name="maxPoolSize">100</property>
<property name="minPoolSize">10</property>
<property name="maxStatements">200</property>
</default-config>
<named-config name="itcast">
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">
jdbc:mysql://localhost:3306/jdbc
</property>
<property name="user">root</property>
<property name="password">itcast</property>
<property name="initialPoolSize">5</property>
<property name="maxPoolSize">15</property>
</named-config>
- C3P0也要导入相应的C3P0包,可以去官网下载才c3p0的jar包,用mysql的话也要导入MySQL的包哦,别忘记了
使用DCPC连接池技术访问数据库(实例)
//JSP界面
<%@ page language="java" import="javax.naming.*" pageEncoding="GB2312"%>
<%@ page import="javax.sql.*" %>
<%@ page import="java.sql.*" %>
<html>
<body>
<%
try {
Context ctx = new InitialContext();
ctx = (Context) ctx.lookup("java:comp/env");
DataSource ds = (DataSource) ctx.lookup("TestJNDI"); //获取连接池对象
Connection conn=ds.getConnection();
Statement stmt=conn.createStatement();
String sql="SELECT * FROM tb_user";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()){
out.println("<br>用户名:"+rs.getString(2)+" 密码:"+rs.getString(3));
}
rs.close();
stmt.close();
conn.close();
} catch (NamingException e) {
e.printStackTrace();
}
%>
</body>
</html>
//需要配置一个contex.xml文件
<Context>
<Resource name="TestJNDI" type="javax.sql.DataSource" auth="Container"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=db_sql"
username="sa" password="" maxActive="4" maxIdle="2" maxWait="6000" />
</Context>
- 记得导入相应的sqljdbc.jar或者sqljdbc4.jar的jar包,这个实例就可以使用连接池访问数据库了