数据源与连接池

  • 连接池和连接源

连接池提供了一种连接时资源被消耗的解决方案,通过数据源来获得连接池中的一个连接。应用程序启动的时候,连接池建立足够的数据库连接,并将这些连接组成一个连接池,由应用程序动态的对池中的连接进行申请、使用和释放。如果并发请求的连接数大于连接池中的连接,那么该请求将在请求队列中排队等待。另外,应用程序可以根据池中连接的使用率,动态增加或者减少池中的连接数。

连接池技术尽可能的重用消耗内存的资源,大大节省了内存,提高了服务器的服务效率,能够支持更多的客户服务。同时,可以通过其自身的管理机制,来监视数据库连接的数量和使用情况。

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>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值