`
laowood
  • 浏览: 120974 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

池连代码

 
阅读更多
/**
*Source File Name:   ConnectionPool.java
*
*连接池类
*
*经过测式:可以作为(池连)连接数据库之用
*
*
*登陆MySQL时;mysql -uroot -p --default-character-set=gbk;
*
*/
package utilcom;

import java.sql.*;
import java.util.Date;
import java.util.Vector;

public class ConnectionPool {

    private String jdbcDriver;

    private String host;

    private String tableName;

    private String userName;

    private String password;

    private static int maxConnections = 5;

    private static int minConnections =1;

    private Vector conns;
   
    //计录连接数
    private int connections;

    public ConnectionPool(String driver, String host, String table,
            String user, String pw) {
        jdbcDriver = "com.mysql.jdbc.Driver";
        this.host = "localhost";
        tableName = null;
        userName = null;
        password = null;
        connections = 0;
        if (driver != null)
            jdbcDriver = driver;
        if (host != null)
            this.host = host;
        if (table != null)
            tableName = table;
        if (user != null)
            userName = user;
        if (pw != null)
            password = pw;
        conns = new Vector();
        try {
            init();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public void setConnectionAmounts(int min, int max) {
        if (min > -1)
            minConnections = min;
        if (max > min)
            maxConnections = max;
        try {
            closeAll();
            init();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public Connection openConnection() {
        try {
            return get(0);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    public void closeConnection(Connection conn) {
        ret(conn);
    }

    public int getConnectionAmount() {
        return getConnAmount();
    }
   
    /**
     *
     * @throws SQLException
     */
    protected void init() throws SQLException {
        connections = minConnections;
        try {
            //加载数据库驱动
            Class.forName(jdbcDriver).newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
            throw new SQLException(e.getMessage());
        } catch (IllegalAccessException e) {
            e.printStackTrace();
            throw new SQLException(e.getMessage());
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            throw new SQLException(e.getMessage());
        }
        for (int i = 0; i < minConnections; i++){
            conns.add(i, newConnection());          
        }
    }

    private void closeAll() throws SQLException {
        for (int i = 0; i < conns.size(); i++) {
            Connection conn = (Connection) conns.get(i);
            conn.close();
        }

    }

    private Connection get(int step) throws SQLException {
       
        //conns.size() > 0 ==true 说明向量中有连接
        if (conns.size() > 0) {
            Connection conn = (Connection) conns.remove(0);
            if (conn == null || conn.isClosed())
                conn = newConnection();
            return conn;
        }
        if (step > 50)
            return null;
        //如果在用的连接数大于等于maxConnections,等待后递归,
        //反之新建连接connections++
        if (connections >= maxConnections) {
            try {
                Thread.sleep(100L);
            } catch (InterruptedException interruptedexception) {
            }
            return get(step++);
        } else {
            connections++;
            return newConnection();
        }
    }

    private void ret(Connection conn) {
        try {
            if (conn == null)
                conn = newConnection();
            conns.add(conn);
        } catch (SQLException e) {
            connections--;
        }
    }

    private Connection newConnection() throws SQLException {
        System.out.println("Create connection to DB--");
        return DriverManager.getConnection("jdbc:mysql://" + host + "/"
                + tableName + "?user=" + userName + "&password=" + password);
    }

    public int getConnAmount() {
        return connections;
       
    }
   
    protected void finalize() {
        try {
           
            closeAll();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    /**
     * 测式用主涵数
     */
    public static void main(String[] arge) {
        long time=new Date().getTime();
      //  PoolMan pm = new PoolMan();
       ConnectionPool cp=new ConnectionPool("com.mysql.jdbc.Driver","localhost:3306","test","root","");
        try {
           // for(int i=0;i<5000;i++){
                Vector v=new Vector(100,10);
                Connection cn = cp.openConnection();
                Statement stmt = cn.createStatement();
               
                //设置字符编码格式为:GBK
                stmt.execute("set names gbk");
                ResultSet rs = stmt.executeQuery("select * from test");
                while (rs.next()) {
                   // System.out.println(rs.getString("msisdn") + rs.getString("nickname"));
                   
                    System.out.println(rs.getString("name"));
                    v.add(rs.getString("name"));
                }
               
                //cp.closeConnection(cn);
                rs.close();
                for(int i=0;i<v.size();i++){
                    String temp =(String)v.get(i);
                   // temp=temp.replaceAll("\n","");
                    //将记录中的一个“\”替换成“\\”插入数据库中后显示应然是“\”
                    temp=temp.replaceAll("\\\\","\\\\\\\\");
                    String sql="insert into test (name)values('"+temp+"')";
                   
                    System.out.println(sql);
                   // stmt.executeUpdate(sql);  
                }
            //    System.out.println(i);
        //   }
            System.out.println(new Date().getTime()-time);
        } catch (Exception e) {
            e.printStackTrace();

        } finally {
            try {
                System.out.println("close connection---");
                cp.closeAll();   
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
分享到:
评论

相关推荐

    JAVA 使用数据库连接池连接Oracle数据库全代码

    ### JAVA 使用数据库连接池连接Oracle数据库全代码解析 #### 一、概述 本文将详细介绍如何在Java项目中使用Apache DBCP(Database Connection Pool)来连接Oracle数据库,并提供完整的示例代码。通过这种方式,我们...

    数据库连接池java代码实现

    本文将深入探讨如何使用Java代码来实现一个简单的数据库连接池,并解释其核心概念和工作原理。 连接池的基本思想是维护一组预初始化的数据库连接,当应用程序需要时,可以从池中获取一个连接,使用完毕后,再归还回...

    数据库连接池代码实现

    在使用C3P0时,我们需要在配置文件中设置相关参数,如初始连接数、最大连接数等,并在代码中加载这些配置,创建PoolConfig对象,然后使用ComboPooledDataSource类创建连接池实例。 2. **HikariCP** 是目前性能最优...

    jsp连接数据库连接池代码示例

    2. **调用连接池**:在JSP中,可以使用Java代码片段(`&lt;% %&gt;`)或自定义标签来调用Java后台类(如`ConnectionPool`)获取数据库连接。 3. **执行SQL查询**:使用获取的连接执行SQL语句,例如检查用户名和密码是否...

    linux内存池代码实例

    下面我们将详细探讨Linux内存池的原理、实现方式以及代码实例。 一、内存池原理 内存池的基本思想是将大块内存分割成固定大小的小块,这些小块被称为内存块或者对象。当需要内存时,从内存池中分配一个或多个内存...

    java 数据库连接池的实现代码

    本示例代码展示了一个简单的数据库连接池实现,名为`DBConnectionManager`,用于管理和分配数据库连接。下面将详细解释相关知识点: 1. **单例模式**:在类`DBConnectionManager`中,可以看到`instance`变量被声明...

    MySql数据库连接池C#代码(有注释含测试代码)

    本示例包含的代码文件`ConnectionPool.cs`、`TestConnectionPool.cs`和`PooledConnection.cs`提供了自定义数据库连接池的实现。 首先,我们来看`ConnectionPool.cs`。这个文件通常会包含一个类,比如`...

    数据库连接池代码

    数据库连接池是Java开发中非常重要的一个概念,它在处理大量并发访问时能显著提高数据库操作的性能。本文将深入探讨数据库连接池的工作原理、重要性以及如何在Java中实现和使用连接池。 首先,我们需要理解数据库...

    养鱼池开发代码

    养鱼池开发代码主要涉及到的是将信息技术应用于农业领域,特别是水产养殖业的自动化与智能化管理。这个项目可能包括硬件设计、软件编程以及数据监测等多个环节,旨在提高养鱼池的运营效率,降低人工成本,同时确保...

    连接池单例代码

    ### 连接池单例代码解析 #### 一、引言 在软件开发尤其是Web应用开发过程中,数据库连接是至关重要的资源之一。由于创建数据库连接消耗较多系统资源且效率较低,因此合理管理和重用数据库连接变得尤为重要。连接池...

    sql200连接池配置代码

    "sw--sql200连接池配置代码"可能指的是特定的软件或框架中关于SQL Server 2000连接池的配置代码,这部分内容可能包含了更复杂的逻辑,如动态调整连接池大小、监控连接池状态等。如果"sql200连接池配置代码"这个...

    java web数据库连接池代码

    Java Web数据库连接池代码详解 Java Web开发中,数据库连接池是非常重要的一部分。连接池可以减少数据库连接的频率,提高数据库访问的效率,并且可以减少系统的资源消耗。在Java Web开发中,我们通常使用连接池来...

    springboot2配置Lettuce连接池完整代码

    springboot2配置Lettuce连接池完整代码,采用common2-pool连接池,Lettuce为redis高级客户端,由于阅读官网文档太简单,无法完成配置,所有本示例是通过阅读源码后编写的

    六种内存池创建代码

    这六种内存池创建代码分别体现了不同的设计思想和优化策略,开发者可以根据实际应用的需求和性能瓶颈选择合适的内存池实现。理解这些算法有助于编写更高效、更稳定的内存管理程序。在实践中,还需要考虑内存碎片、...

    jdbc连接池代码详解

    jdbc连接池代码详解

    Java直连数据库代码还有连接池代码

    首先,让我们了解Java直连数据库的基本步骤。这通常涉及以下关键知识点: 1. **JDBC(Java Database Connectivity)**: JDBC是Java平台的标准API,允许Java程序与各种数据库进行通信。它提供了一组接口和类,使得...

    Visual C++源代码 146 如何设置数据库连接串连接池信息

    Visual C++源代码 146 如何设置数据库连接串连接池信息Visual C++源代码 146 如何设置数据库连接串连接池信息Visual C++源代码 146 如何设置数据库连接串连接池信息Visual C++源代码 146 如何设置数据库连接串连接池...

    JAVA实现数据库连接池代码

    基于JAVA语言的一种有效的数据库连接池的实现代码。

Global site tag (gtag.js) - Google Analytics