`
hn_liuyi
  • 浏览: 32454 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

java C/S客户端实现数据库连接池

阅读更多
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Iterator;

import IPNMS.AppMain;

/**
* 配置数据库连接 driver url user password
*
* @author llt
*
*/


public class DBConnection {

    /**
     * DBConnectin instance 定义了数据库的唯一实例 定义了四个连接 conn,conn1,conn2,conn3
     *
     */
    private static DBConnection instance;

    private final static int databaseConnectionNum = 15;
    private final static int maxConnectNum = 100;
    private static int checkOut = 0;//已用连接
    private static ArrayList<Connection> connectlist = new ArrayList<Connection>();
    private static ArrayList<Statement>  stmtList = new ArrayList<Statement>();
   
    public static void createDBConnectionPool(){
        for (int i = connectlist.size(); i < databaseConnectionNum; i++) {
        instance = new DBConnection();
        Connection connobject=null;
try {
connobject = instance.getConnection();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
connectlist.add(connobject);
        }
    }
    public static void closeDBConnectionPool(){
    Iterator dbConnectionIterator = connectlist.iterator();
//    Iterator stmtIterator = stmtList.iterator();
    while(dbConnectionIterator.hasNext()){
    Connection connection = (Connection) dbConnectionIterator.next();
   
    try {
    if(connection!=null){
    connection.close();
    }
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    }
//    while(stmtIterator.hasNext()){
//    Statement stmtobj = (Statement) stmtIterator.next();
//    try {
// dealClose(stmtobj,null);
// } catch (SQLException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
//    }
    }

    public DBConnection() {
        super();
    }

//    public static void setText(String text) {
//        DBConnection.text = text;
//    }

    public static Connection getConnection() throws SQLException {

//        // 读取数据库配置信息(设计内部软件信息 略)


      
        return DriverManager.getConnection(url, uNameEnyet, uPwdEnyet);

    }

    private static Connection getInstance() throws SQLException {

        if (instance == null) {
            instance = new DBConnection();
        }    
        return instance.getConnection();
     }
   
/*
     //处理开始事物
 
    public static void beginTrans()  throws SQLException{  
        Statement stmt = null;
        boolean autoCommit;
        try
        {
        autoCommit = getInstance().getAutoCommit();
        getInstance().setAutoCommit(false);
        }
        catch(SQLException ex)
        {
            ex.printStackTrace();
            System.out.print("beginTrans Errors");
            throw ex;
        }
    }
   
    //处理更新sql
   
    public static  void executeUpdate(String sql) throws SQLException {
       
        Statement stmt = null;
        try
        {
            stmt=getInstance().createStatement();
            stmt.executeUpdate(sql);
        }
        catch(SQLException ex)
        {
            ex.printStackTrace();
            System.out.println("conndb.executeUpdate:"+ex.getMessage());
            throw ex;
        }
    }

   
    //处理提交事物
   
    public static void commit()  throws SQLException {
        boolean autoCommit = false;
        try
        {
            getInstance().commit();
            getInstance().setAutoCommit(autoCommit);
        }
        catch(SQLException ex)
        {
            ex.printStackTrace();
            System.out.print("Commit Errors");
            throw ex;
        }
    }
   
    // 处理回滚事物
   
    public static void rollback(){
        Statement stmt = null;
        boolean autoCommit = false;
        try
        {
            getInstance().rollback();
            getInstance().setAutoCommit(autoCommit);
        }          
        catch(SQLException ex)
        {
            ex.printStackTrace();
            System.out.print("Rollback Errors");
        }
    }*/
   
       private static Connection getFreeConnection(){
       int stmtNum = stmtList.size();//获取statement对象的个数
       Connection stmtConn=null;      
       if (connectlist.size() > 0) {
// 获取向量中第一个可用连接  
stmtConn = (Connection) connectlist.get(0);
connectlist.remove(0);
try {
if (stmtConn.isClosed()) {
// 递归调用自己,尝试再次获取可用连接  
stmtConn = getFreeConnection();
}
} catch (SQLException e) {
// 递归调用自己,尝试再次获取可用连接  
stmtConn = getFreeConnection();
}
} else if (checkOut < maxConnectNum) {
instance = new DBConnection();
        Connection connobject=null;
try {
stmtConn = instance.getConnection();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// con = newConnection();
}
if (stmtConn != null) {
checkOut++;
}
       return stmtConn;
       }

    // 得到一个会话

    public static Statement getStatement()  {

        Statement stmt = null;

        Connection stmtConn = getFreeConnection();
        try {
stmt = stmtConn.createStatement();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
        return stmt;
       
    }

    // 处理提取查询,返回结果集
    public static ResultSet dealQuery(String sql, Statement stmt) {
        ResultSet rs = null;
        try {
            rs = stmt.executeQuery(sql);

        } catch (SQLException e) {
            e.printStackTrace();
            return null;
        }
        return rs;
    }

    /**·
     * 使用给定连接执行查询操作
     * @param sql 执行语句
     * @param conn 连接
     * @return
     * @throws SQLException
     */
    public static ResultSet dealQuery(String sql,Connection conn) throws SQLException {
    Statement stmt = null;
    ResultSet rs = null;
    try{
            stmt = conn.createStatement();
            rs = stmt.executeQuery(sql);
    }finally{
//    if(stmt!= null&& stmt.isClosed() == false){
//    stmt.close();
//    }
    }
        return rs;
    }
   
    // 处理数据更新
    public static int dealUpdate(String sql, Statement stmt) {
        try {
            return stmt.executeUpdate(sql);
        } catch (SQLException e) {
            e.printStackTrace();
            return -1;
        }
    }
   
    /**
     * 使用给定连接来处理更新
     * @param sql 执行语句
     * @param conn 连接
     * @return
     * @throws SQLException
     */
    public static int dealUpdate(String sql,Connection conn) throws SQLException {
    Statement stmt = null;
    int check =-1;
    try{
    stmt = conn.createStatement();
    check = stmt.executeUpdate(sql);
    }finally{
//    if(stmt!= null&& stmt.isClosed() == false){
//    stmt.close();
//    }
    }
        return check;
    }

    // 关闭会话连接
    public static void dealClose(Statement stmt, ResultSet rs) throws SQLException {
    Connection connObj = stmt.getConnection();
        if (rs != null)
            rs.close();
        if (stmt != null)
            stmt.close();
       
    if(checkOut > databaseConnectionNum){//当statement对象数大于数据库连接数的时候,关闭一个statement对象的同时关闭一个连接
       
        if(connObj!=null&&(connObj.isClosed()==false)){
           connObj.close();
           checkOut--;
        }
             
        }else{
        connectlist.add(connObj);
        checkOut--;
        }
    }

    public static void dealClose(Connection conn,Statement stmt, ResultSet rs) throws SQLException {
        if (rs != null)
            rs.close();
        if (stmt != null)
            stmt.close();
//        stmt.getConnection().close();
        if(conn!= null && (conn.isClosed()==false)){
        conn.close();
        }
    }
}
分享到:
评论

相关推荐

    java c/s结构连接池

    本文将深入探讨Java环境下C/S结构中如何实现和使用数据库连接池。 首先,我们来看"DBOptions.java",这通常是一个配置类,用于存储数据库连接相关的参数,如数据库URL、用户名、密码、驱动类名等。这些信息会被用来...

    Java各数据库连接池配置介绍

    在Java中,有多种数据库连接池实现,包括C3P0、DBCP和Proxool等。 **C3P0连接池配置参数详解** 1. `acquireIncrement`:当连接池中的连接耗尽时,一次同时尝试获取的连接数。默认值为3,意味着如果连接池为空,它...

    单实例模式数据库连接池

    ### 单实例模式数据库连接池 #### 概述 单实例模式数据库连接池是一种软件设计模式,主要用于提高数据库访问效率并降低系统资源消耗。在该模式下,整个应用程序仅创建一个数据库连接池实例,所有数据库操作共享这...

    java课程设计c/s结构的图书管理系统

    10. **数据库连接池**:为了提高数据库访问效率,项目可能使用了数据库连接池技术,如C3P0或Apache DBCP,以复用数据库连接。 综上所述,这个课程设计涵盖了Java基础、C/S架构、数据库操作、GUI设计、网络编程等多...

    socket 客户端连接池实现

    连接池的概念源于数据库连接池,它的核心思想是复用已存在的资源,减少创建和销毁资源带来的开销。在Socket客户端连接池中,当我们需要发送数据时,可以从池中获取一个已建立的连接,使用完毕后归还而不是关闭,这样...

    Java中数据库连接池原理机制的详细讲解

    ### Java中数据库连接池原理机制的详细讲解 #### 一、引言 在现代软件开发中,特别是基于Java的企业级应用开发中,数据库连接管理是一个关键环节。由于数据库连接是昂贵的资源,频繁地创建与关闭连接将严重影响系统...

    数据库连接池代码

    数据库连接池是现代Java应用程序中不可或缺的组件,它在提高应用程序性能、管理和优化数据库资源方面起着关键作用。本文将深入探讨基于JDBC的数据库连接池技术,主要针对Oracle数据库,但很多概念同样适用于其他...

    基于JDBC的数据库连接池技术研究

    随着互联网技术的迅猛发展,特别是Web应用的广泛普及,传统的客户端/服务器(C/S)架构已经逐渐被浏览器/服务器(B/S)三层架构所取代。在这种背景下,为了提高企业级应用和电子商务系统的性能和响应速度,JDBC 2.0...

    代理模式之静态代理---数据库连接池对象实现原理

    在本主题“代理模式之静态代理---数据库连接池对象实现原理”中,我们将探讨如何使用静态代理来实现数据库连接池。数据库连接池是现代应用中常用的优化手段,它可以高效地管理数据库连接,避免频繁地创建和关闭连接...

    apache数据库连接池JAR包

    Apache Commons DBCP(Database Connection Pool)是一个开源的Java数据库连接池组件,它提供了一种在Java应用中管理和复用数据库连接的方式。这个组件是Apache软件基金会 Commons项目的一部分,其设计目的是提高...

    HikariCP数据库连接池实战.docx

    HikariCP 是一个高性能的 Java 数据库连接池,由 Zachary Tong 开发并维护。它基于 Apache Commons DBCP,并进行了许多优化和改进,以提供更好的性能和可扩展性。 HikariCP 的核心理念是“简单、透明、高性能”,它...

    java编写数据库连接池实例

    ### Java编写数据库连接池实例详解 #### 一、引言 在Java开发中,数据库连接管理是一项非常重要的任务。为了提高应用程序的性能和资源利用效率,通常会使用数据库连接池来管理与数据库之间的连接。本文将详细介绍...

    数据库连接池

    总的来说,DBCP是一个高效、可靠的数据库连接池实现,它可以帮助Java应用优化数据库访问性能,减少资源消耗,同时提供了一套完善的管理机制来确保连接的稳定性和安全性。在实际项目中,结合其他ORM框架(如Hibernate...

    数据库连接池c3p0所需jar包

    数据库连接池是现代Java应用程序中管理数据库连接的重要工具,它能有效地提高系统性能,减少数据库资源的浪费。本文将深入探讨数据库连接池的概念,重点介绍C3P0连接池及其所需的JAR包。 首先,数据库连接池是一种...

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

    在`MyConnectionHandler.java`这个文件中,我们可以推测它可能实现了一个自定义的数据库连接池。这个类可能包含以下关键部分: 1. **初始化连接池**:在类的初始化阶段,它会根据配置(如最大连接数、最小连接数等...

    Java连接各种数据库方式

    ### Java连接各种数据库方式 在Java开发中,与多种数据库进行交互是一项常见需求。...需要注意的是,在实际应用中,为了确保程序的健壮性和安全性,建议使用连接池来管理数据库连接资源,并在代码中处理好异常情况。

    使用RMI建立数据库连接池

    本篇文章将深入探讨如何使用RMI来创建一个数据库连接池,以及这种做法的优势和实现细节。 首先,我们需要理解数据库连接池的概念。数据库连接池是一种资源管理机制,用于存储预创建的数据库连接。当客户端需要与...

    Tomcat6.0+MyEclipse6.0+mysql5.0数据库连接池配置!.pdf

    Tomcat服务器是Apache软件基金会...通过上述配置步骤,Tomcat6.0服务器能够与MyEclipse6.0开发环境和mysql5.0数据库协同工作,实现一个高效稳定的数据库连接池,从而提高应用程序处理数据库操作的性能和扩展性。

    Java_jdbc数据库连接池总结.doc

    传统C/S(客户端/服务器)架构逐步被B/S(浏览器/服务器)架构所取代,后者更加适应现代Web应用的需求。在这一背景下,Java作为一门强大的编程语言,其开发技术如Servlet+JSP+JavaBean得到了广泛的应用。这些技术...

Global site tag (gtag.js) - Google Analytics