数据库连接池

来源:互联网 发布:萤火虫之墓影评知乎 编辑:程序博客网 时间:2024/06/03 11:52

博主是大学小白,今天花了一上午时间弄了数据库连接池的问题。遇到很多问题,下面分享出来,希望能有所帮组。如果有不到位的地方或者技术性错误还请大佬们指出改正。


首先,什么是数据库连接池:

数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个,释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。

说白了就是为了提高系统的性能,我们先建立几个数据库连接,用的时候直接取。


然后,怎么创建数据库连接池:

在你的web工程下来创建就可以了,当然也可以在tomcat中来配置。这里不做介绍,因为我也不会,哈哈。


首先看工程框架:


在你的web工程下webContent目录中的META-INF文件夹下创建context.xml文件。然后写入:


此处不该用图(我有体会,哈哈)

<?xml version="1.0" encoding="UTF-8"?>
<Context>  
  
    <Resource name="jdbc/mysql"      
       auth="hello_maksim"      
       type="javax.sql.DataSource"      
       driverClassName="com.mysql.jdbc.Driver"      
       url="jdbc:mysql://localhost:3306/video?characterEncoding=utf8"      
       username="root"      
       password=""      
       maxActive="50"      
       maxIdle="20"      
       maxWait="10000" />      
  
</Context>  

标签说明:

name,数据源名称,通常取”jdbc/XXX”的格式; 
            type,”javax.sql.DataSource”; 

username数据库名
            password,数据库用户密码; 
            driveClassName,数据库驱动; 
            maxIdle,最大空闲数,数据库连接的最大空闲时间。超过空闲时间,数据库连 
                     接将被标记为不可用,然后被释放。设为0表示无限制。 
            MaxActive,连接池的最大数据库连接数。设为0表示无限制。 
            maxWait ,最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示 
                     无限制。 
 url="jdbc:mysql://localhost:3306/video?characterEncoding=utf8"  //url要根据你自己的数据库名称来填写


接着就是在WEB-INF的web.xml文件的<webapp></webapp>节点下加入下面的标签


 <resource-ref>  
    <description>DB Connection</description>  
    <res-ref-name>jdbc/mysql</res-ref-name>  
    <res-type>javax.sql.DataSource</res-type>  
    <res-auth>hello_maksim</res-auth>  

</resource-ref>  



还有最重要的,就是你要把mysql的驱动导入tomcat的lib目录下.

然后创建类来获取数据库连接、

package com.example.database;


import java.sql.Connection;
import java.sql.SQLException;


import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;


public class DBHelper {   
    
    public static Connection getConnection() throws SQLException,NamingException   
    {   
        // 初始化查找命名空间   
        Context initContext = new InitialContext();   
        Context envContext = (Context)initContext.lookup("java:/comp/env");   
        // 找到DataSource   
        DataSource ds = (DataSource)envContext.lookup("jdbc/mysql");   
        return ds.getConnection();   
    }   
}  

注意: 在导入依赖的包时,千万不要导错了包。



然后发布web项目来测试就好了


测试说不定会粗问题的,下面将我遇到的问题来说一下


一。你可能会想以前一样 写一个测试类然后再javaSE项目里来测试。千万别,你是改不对的。哈哈。会报出找不到应用环境啥的错误;如下


我就傻傻的测试了好一会。


二。我的mysql数据库驱动还显示过时了。一直讲究不能用最新的,哈哈。这次竟然被嫌弃太老了。所以我又换了数据库驱动。再说一遍,数据库驱动要放在哪来着? tomcat的lib 目录下。