- 连接池和连接源
连接池提供了一种连接时资源被消耗的解决方案,通过数据源来获得连接池中的一个连接。应用程序启动的时候,连接池建立足够的数据库连接,并将这些连接组成一个连接池,由应用程序动态的对池中的连接进行申请、使用和释放。如果并发请求的连接数大于连接池中的连接,那么该请求将在请求队列中排队等待。另外,应用程序可以根据池中连接的使用率,动态增加或者减少池中的连接数。
连接池技术尽可能的重用消耗内存的资源,大大节省了内存,提高了服务器的服务效率,能够支持更多的客户服务。同时,可以通过其自身的管理机制,来监视数据库连接的数量和使用情况。
DataSource接口代表了数据源,可以通过这个接口来获得连接池中的一个连接,一般由数据库驱动程序厂商实现。
- 简单实例
1.在WEB-INF的同级目录META-INF文件夹下配置context.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<!-- Resource定义数据源
※ name 数据源的名字
auth 由容器创建和管理Resource
※ type 数据源类型
※ username 数据库用户名称
※ password 数据块用户密码
maxIdle 最大数据库空闲连接数量
maxActive 数据库最大活跃连接数量
maxWait 数据库最大等待连接数量
※ driverClassName 数据库连接驱动类名
※ url 数据库连接的URL地址
-->
<Resource
name = "jdbc/DbPool"
auth = "Container"
type = "javax.sql.DataSource"
username = "root"
password = "123456"
maxIdle = "30"
maxActive = "100"
maxWait = "5000"
driverClassName = "com.mysql.jdbc.Driver"
url = "jdbc:mysql://localhost:3306/user"
/>
</Context>
2.建立DbPool.java,并在该类中访问数据源,实现对数据库的连接
package org;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
public class DbPool {
private Connection conn;
public void createConn() { //定义连接数据源的方法
try {
//初始化Context
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
//获得数据源
DataSource ds = (DataSource) envCtx.lookup("jdbc/DbPool");
//获得连接对象
conn = ds.getConnection();
System.out.println("SUCCESS");
} catch (Exception e) {
e.printStackTrace();
System.out.println("ERROR");
}
}
public ResultSet executeQuery(String sql) {
ResultSet rs = null;
if (conn == null) {
createConn();
}
try {
PreparedStatement pst = this.conn.prepareStatement(sql);
rs = pst.executeQuery();
} catch (Exception e) {
e.printStackTrace();
}
return rs;
}
}
3.建立dbPool.sp
<%@ page language="java" import="java.util.*,java.sql.*" pageEncoding="GB2312"%>
<%@ page import="org.DbPool" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>使用数据源</title>
</head>
<body >
<jsp:include page="index.html"></jsp:include>
<%
DbPool dbp = new DbPool();
String sql = "select * from person";
ResultSet rs = dbp.executeQuery(sql);
while(rs.next()){
out.print(rs.getInt(1));
out.print(" ");
out.print(rs.getString(2));
out.print(" ");
out.print(rs.getInt(3));
out.print(" ");
out.print(rs.getString(4));
out.print("<br/>");
}
%>
</body>
</html>