`

我的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

分享到:
评论

相关推荐

    常用jdbc数据库连接jar包,数据库连接池jar包

    在描述中提到的几个数据库连接池,是提高数据库访问性能的重要工具。数据库连接池在初始化时会创建一定数量的数据库连接并保存起来,当应用程序需要连接时,可以从池中获取一个已存在的连接,而不是每次都去新建,用...

    Java jdbc数据库连接池总结

    Java JDBC 数据库连接池总结 Java 语言中,JDBC(Java DataBase Connection)是应用程序与数据库沟通的桥梁。在 Web 应用开发的早期,主要使用的技术是 CGIASPPHP 等。之后,Sun 公司推出了基于 Java 语言的 ...

    java_jdbc数据库连接池总结

    Java JDBC 数据库连接池总结 Java JDBC 数据库连接池是 Java 应用程序访问数据库的基本原理之一。Java 语言通过 JDBC 技术访问数据库,JDBC 是一种“开放”的方案,为数据库应用开发人员和数据库前台工具开发人员...

    JDBC工具类和Druid数据连接池实现数据库数据增删查改操作

    使用Druid数据库连接池操作步骤:完成Druid的jar包加载,写入配置文件properties,新建properties对象,使用load加载配置文件,使用DruidDataSourceFactory获取连接池对象,使用getConnection获取Connection连接,...

    durid数据库连接池的使用方式,定义了工具类,可以通过durid方式访问数据库,实现对数据库的添加

    Durid,全称为 Distributed Universal JDBC,是阿里巴巴开源的一个高性能、分布式、可扩展的数据库连接池组件。它在设计上借鉴了C3P0、DBCP等成熟的数据源管理方案,并在此基础上进行了优化和增强,提供了更强大的...

    JDBC线程安全的Druid数据库连接池工具类

    JDBC工具类使用阿里巴巴的数据库连接池Druid,支持高并发,有多线程环境下的事务和查询测试。

    jdbc使用c3p0连接池连接数据库的工具类

    jdbc使用c3p0连接池连接数据库,支持配置多个数据源,有相关的查询测试。

    数据库连接池——JDBC通过代理模式来保持用户关闭连接的习惯

    在数据库连接池的上下文中,代理类会拦截数据库连接的打开和关闭操作,实现在合适的时间点真正地打开或关闭连接,而用户仍可以像使用普通数据库连接一样操作。代理类通常会在初始化时获取真实连接,当用户调用`get...

    数据库连接池c3p0jar包

    总的来说,C3P0作为一款成熟的数据库连接池,对于Java开发者来说,是一个值得信赖的工具,可以帮助我们更有效地管理和使用数据库连接,提升应用程序的性能和可靠性。在实际项目中,根据具体需求合理配置C3P0,可以更...

    dbcp数据库连接池使用jar包

    总的来说,DBCP数据库连接池是Java应用程序中提高数据库访问效率的重要工具,通过合理配置和使用,可以显著优化数据库操作性能,降低系统资源消耗。在实际项目中,根据具体需求选择合适的数据库连接池组件,对于提升...

    数据库连接池驱动包_数据库连接池驱动包_

    这是 C3P0 数据库连接池的依赖库,主要用于提供一些通用的工具类和异常处理。C3P0 使用这个库来完成对数据库连接的管理。 3. C3P0 (c3p0-0.9.5.2.jar): C3P0 是一个开源的 JDBC 连接池,它实现了数据源和 JNDI ...

    数据库连接池 jar包

    总的来说,"数据库连接池 jar包"是提升数据库访问效率和降低资源消耗的重要工具,正确理解和使用连接池对于优化Java应用程序的性能至关重要。通过合理配置和管理连接池,我们可以确保数据库连接的高效利用,同时保证...

    JDBC线程安全的Druid数据库连接类

    JDBC工具类使用阿里巴巴的数据库连接池Druid,支持高并发,支持多线程环境下的事务和查询测试。

    jdbc+数据库连接池+dbutils

    数据库连接池是一种管理数据库连接的技术,它可以复用预创建的数据库连接,而不是每次请求时都创建新的连接。这有助于减少数据库连接的开销,提高系统的性能和响应速度。常见的数据库连接池有C3P0、DBCP等。 ##### ...

    数据库数据库连接池的jar包

    总结来说,`数据库数据库连接池的jar包`这个主题涵盖了数据库连接池在Java中的重要性,以及如何使用C3P0和DBCP这两个流行的连接池实现。`dbutils`库则为数据库操作提供了便利的工具,简化了开发流程。这三个库的jar...

    数据库连接池包

    数据库连接池是数据库管理中的重要组成部分,它优化了数据库的性能和资源利用效率。在这个"数据库连接池包"中,包含的是c3p0数据库连接池的组件,这是一个开源的Java连接池实现,广泛用于Java应用程序中。让我们深入...

    数据库连接池-jar包

    数据库连接池是现代应用程序开发...了解并正确使用数据库连接池是提高系统效率和稳定性的关键,同时,选择合适的jar包也会影响系统的整体性能。在实际项目中,应根据具体需求和性能测试结果来确定最合适的连接池实现。

    jdbc数据库连接池

    JDBC数据库连接池是提升Web应用性能和稳定性的重要工具。通过合理配置和使用DbUtils等辅助库,开发者可以更高效地管理数据库连接,减少编码工作量,提高代码的健壮性和可维护性。理解和掌握JDBC连接池的配置和使用,...

Global site tag (gtag.js) - Google Analytics