我的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
    评论
好的,下面是使用Druid连接池创建Java工具类的步骤: 1. 首先,需要将Druid的jar包导入到项目中。可以从Maven仓库或者Druid官网下载。 2. 在Java工具类中导入Druid需要的包: ```java import com.alibaba.druid.pool.DruidDataSource; import java.sql.Connection; import java.sql.SQLException; ``` 3. 创建Druid连接池,可以在工具类的静态代码块中完成: ```java public class DatabaseUtils { private static DruidDataSource dataSource; static { dataSource = new DruidDataSource(); dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); dataSource.setUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8"); dataSource.setUsername("root"); dataSource.setPassword("123456"); dataSource.setInitialSize(5); // 初始化连接数 dataSource.setMaxActive(10); // 最大连接数 dataSource.setMinIdle(2); // 最小空闲连接数 dataSource.setMaxWait(60000); // 获取连接的最大等待时间,单位毫秒 } } ``` 4. 编写获取数据库连接的方法: ```java public static Connection getConnection() throws SQLException { return dataSource.getConnection(); } ``` 5. 在需要使用数据库连接的地方,调用上面编写的getConnection方法即可获取连接。 ```java public static void main(String[] args) { Connection conn = null; try { conn = DatabaseUtils.getConnection(); // do something with the connection } catch (SQLException e) { e.printStackTrace(); } finally { if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } ``` 以上就是使用Druid连接池创建Java工具类的全部步骤。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值