我的JDBC工具类(2)使用数据库连接池

创建一个自己的数据库连接池类(为JDBC工具类服务:创建Connection,关闭Connection):

package com.mengya.JDBCUtil;

 

import java.io.IOException;

import java.io.InputStream;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

import java.util.LinkedList;

import java.util.Properties;

 

public class DataSource {

    private InputStream instream;

 

    private Properties pro;

 

    private static int initCount = 5;// 初始连接数

 

    private static int maxCount = 10;// 数据库最大连接数

 

    private static int currentConnt = 0;// 当前数据库的连接数

 

    LinkedList<Connection> connectionPool = new LinkedList<Connection>();// 数据库连接池

 

    // 同包才能方问该类

    DataSource() {

       instream = this.getClass().getResourceAsStream("/system.properties");

       pro = new Properties();

       try {

           pro.load(instream);

           try {

              Class.forName(pro.getProperty("driver"));

              for(int i=1;i<=initCount;i++){

                  this.connectionPool.addLast(this.CreateConnection());

              }

           } catch (ClassNotFoundException e) {

              e.printStackTrace();

              throw new RuntimeException("加载数据库驱动时出错!");

           }

       } catch (IOException e) {

           e.printStackTrace();

           throw new RuntimeException("加载配置文件出错!");

       }

    }

 

    // 释放数据库的连接

    public void freeConnection(Connection conn) {

       this.connectionPool.addLast(conn); //仍然放到数据库连接池中去了,也没有关掉,这样就可以重复使用

    }

 

    // 创建数据库的连接

    private Connection CreateConnection() {

       Connection conn = null;

       try {

           conn = DriverManager.getConnection(pro.getProperty("url"), pro

                  .getProperty("username"), pro.getProperty("password"));

           currentConnt++;

       } catch (SQLException e) {

           e.printStackTrace();

           throw new RuntimeException("创建数据库连接失败!");

       }

       return conn;

    }

 

    // 得到数据库的连接

    public Connection getConnection() {

       synchronized (connectionPool) {

           if (connectionPool.size() > 0) {

               return connectionPool.removeFirst();

           }

           if (currentConnt < maxCount) {

              return this.CreateConnection();

           }

           throw new RuntimeException("数据库已达到最大的连接数!");

       }

    }

}

 

再创建一个JDBC工具类,在DAO中就调用该工具类中的方法

package com.mengya.JDBCUtil;

 

import java.io.IOException;

import java.io.InputStream;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.Properties;

 

public final class SQLConnectionUitl {

       private static SQLConnectionUitl sqlconn;

 

       private DataSource myDataSource;

 

       // 私有构造方法

       private SQLConnectionUitl() {

              myDataSource = new DataSource();

       }

 

       // 单例模式,SQLConnectionUitl只实例化一次,这样数据库驱动也只加载一次.

       public static SQLConnectionUitl getSQLConnectionUitl() {

              if (sqlconn == null) {

                     synchronized (SQLConnectionUitl.class) {

                            if (sqlconn == null) {

                                   sqlconn = new SQLConnectionUitl();

                            }

                     }

              }

              return sqlconn;

       }

 

       // 得到数据库的连接

       package com.mengya.JDBCUtil;

 

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

 

public final class SQLConnectionUitl {

    private static SQLConnectionUitl sqlconn;

 

    private DataSource myDataSource;

 

    // 私有构造方法

    private SQLConnectionUitl() {

       myDataSource = new DataSource();

    }

 

    // 单例模式,SQLConnectionUitl只实例化一次,这样数据库驱动也只加载一次.

    public static SQLConnectionUitl getSQLConnectionUitl() {

       if (sqlconn == null) {

           synchronized (SQLConnectionUitl.class) {

              if (sqlconn == null) {

                  sqlconn = new SQLConnectionUitl();

              }

           }

       }

       return sqlconn;

    }

 

    // 得到数据库的连接

    public Connection getSQLConnection() {

       Connection conn = null

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值