DBCP数据库连接池

在用JDBC连接数据库的时候,需要创建对数据库的连接,这样才能执行后续的操作。然而,这样做有两个问题:

  1. 数据库允许的连接个数有限
  2. 创建连接的过程需要消耗内存和时间

所以,JDBC引入了连接池的概念。也就是说,连接池里面维护着一些对数据的连接对象,我们的代码需要的时候直接拿来用就可以了,这样就不必每次需要对数据库连接的时候再新建Connection对象,节省时间空间,从而提高软件质量。(eg. Apache就维护了一个连接池,让我们的web 程序能够方便的使用)

这里我们使用Apache的开源组件DBCP连接池。DBCP连接池通过一个DasicDataSource对象来实现连接池的管理。DBCP可以从commons.apache.org官方网站下载,它包括三个JAR包。

 

常用接口如下:

 

示例代码:

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import org.apache.commons.dbcp2.BasicDataSource;

public class Hello

{

       static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";

       static String DB_URL = "jdbc:mysql://localhost:3306/mldn";

       static final String USERNAME = "root";

       static final String PASSWORD = "admin";

       static BasicDataSource bds = null;

      

       public static void dbPoolInit()

       {

              bds = new BasicDataSource();

              bds.setUrl(DB_URL);

              bds.setDriverClassName(JDBC_DRIVER);

              bds.setUsername(USERNAME);

              bds.setPassword(PASSWORD);

       }

      

    public static void main(String a[]) 

    {

       Connection conn = null;

       Statement stmt = null;

       ResultSet rs = null;

      

       Hello.dbPoolInit();

      

       try

              {

                     conn = bds.getConnection();

                     stmt = conn.createStatement();

              rs = stmt.executeQuery("SELECT name FROM user;");

              while(rs.next())

              {

                     System.out.println("Hello " + rs.getString("name"));

              }

              } catch (SQLException e)

              {

                     // TODO Auto-generated catch block

                     e.printStackTrace();

              }

       finally

       {

              try

              {

                     conn.close();

                     stmt.close();

                     rs.close();

                     bds.close();

              }

              catch(Exception e)

              {

                     //ignore all exceptions when closing.

              }

              }

      

       System.out.println("///Done~~");

    }

}

原文地址:https://www.cnblogs.com/kuillldan/p/5864673.html