对apache dbcp的封装

JDBC封装类升级版,支持DBCP、C3P0连接池,Java连接数据库带例子 Java JDBC封装类升级版,带增删改查例子,支持oracle,MySql,hsqldb 等,支持事务,返回数据格式 支持二维数组,MAP格式,以及javabean对象。有利于初学者DbDemo.java为demo,Connect为jdbc封装类,可以作为项目共通类使用。 立即下载

Apache dbcp 数据库连接池,这是一个很不错的软件,可以大大的提高我们jsp应用程序的性能,开发前奏,获取软件,下载地址:http://commons.apache.org/downloads/download_dbcp.cgi
加压文件commons-dbcp-1.2.2.jar 到你项目的类路径中 但是光有它还是不够的,它依赖commons-pool-1.3.zip 这个开源项目,下载地址http://commons.apache.org/downloads/download_pool.cgi
最新的版本是1.3 解压commons-pool-1.3.jar 文件到你的类路径中,这样我们的就算是完事了,基本上平台 就算是搭起来了。

下面给大家看看我的具体实现
/*
 * Mssql.java
 *
 * Created on 2007年10月22日, 上午10:14
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package cn.CCmingzhou.db;

import java.sql.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

import org.apache.commons.dbcp.*;
import org.apache.commons.pool.*;
import org.apache.commons.pool.impl.*;
/**
 *冷漠大神 qq:361619004
 * @author Angel
 */
public class Mssql  {
   
    /** Creates a new instance of Mssql */
   private static String path="";
   private static String strDriver="";
   private static String strConn="";
   private static String strUser="";
   private static String strPass="";
  
   private static Class driverClass = null;   
   private static ObjectPool connectionPool = null;
  

    public Mssql() {       
    }
   
    /**
     * 装载配置文件 mssql.xml  WEB-INF/mssql.xml
     */
     private void loadXml()
     {
        path=this.getClass().getResource("/").toString();
 path=path.substring(6,path.length()-8)+"mssql.xml";
  
 try{
  DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder=factory.newDocumentBuilder();
        Document doc=builder.parse(path);
        doc.normalize();
        NodeList links=doc.getElementsByTagName("link");
   
   for (int i=0;i<links.getLength();i++){
            
             Element link=(Element)links.item(i);
                strDriver=link.getElementsByTagName("Driver").item(0).getFirstChild().getNodeValue();
                strConn=link.getElementsByTagName("URL").item(0).getFirstChild().getNodeValue();
               
                if(link.getElementsByTagName("UserName").item(0).getFirstChild()!=null){
                 strUser=link.getElementsByTagName("UserName").item(0).getFirstChild().getNodeValue();
    }else{
     strUser="";
    }
                if(link.getElementsByTagName("Password").item(0).getFirstChild()!=null){
                 strPass=link.getElementsByTagName("Password").item(0).getFirstChild().getNodeValue();
    }else{
     strPass="";
    }
                }
 }catch(Exception e){
  e.printStackTrace();
 }
     }
    
     /**   
     * 初始化数据源   
     */    
    private static synchronized void initDataSource() {            
        if (driverClass == null) {    
            try {    
                driverClass = Class.forName(strDriver);    
            } catch (ClassNotFoundException e) {    
                e.printStackTrace();   
            }    
        }    
    }
   
     /**   
     * 连接池启动   
     * @throws Exception   
     */    
    public void StartPool() {   
        loadXml();   
        initDataSource();    
        if (connectionPool != null) {    
            ShutdownPool();    
        }     
        try {
            connectionPool = new GenericObjectPool(null);
            ConnectionFactory connectionFactory = new DriverManagerConnectionFactory(strConn,strUser,strPass);    
            PoolableConnectionFactory poolableConnectionFactory = new PoolableConnectionFactory(connectionFactory, connectionPool, null, null, false, true);    
            Class.forName("org.apache.commons.dbcp.PoolingDriver");    
            PoolingDriver driver = (PoolingDriver) DriverManager.getDriver("jdbc:apache:commons:dbcp:");    
            driver.registerPool("dbpool", connectionPool);                 
            System.out.println("装配连接池完毕!");    
        } catch (Exception e) {    
            e.printStackTrace();   
        }    
    }
   
    /**   
     * 释放连接池   
     */    
    public static void ShutdownPool() {    
        try {    
            PoolingDriver driver = (PoolingDriver) DriverManager.getDriver("jdbc:apache:commons:dbcp:");    
            driver.closePool("dbpool");   
        } catch (SQLException e) {    
            e.printStackTrace();   
        }    
    }    
   
    /**   
     * 取得连接池中的连接   
     * @return   
     */    
    public Connection getConnection() {    
        Connection conn = null;    
        if(connectionPool == null)    
            StartPool();    
        try {    
            conn = DriverManager.getConnection("jdbc:apache:commons:dbcp:dbpool");    
        } catch (SQLException e) {    
            e.printStackTrace();   
        }    
        return conn;    
    }    
       
    /**  
     * 获取连接  
     * getConnection  
     * @param name  
     * @return  
     */  
    public Connection getConnection(String name){   
        return getConnection();   
    }
    /**  
     * 释放连接  
     * freeConnection  
     * @param conn  
     */  
    public static void freeConn(Connection conn){   
        if(conn != null){   
            try {   
                conn.close();   
            } catch (SQLException e) {                 
                e.printStackTrace();   
            }   
        }   
    }   
    /**  
     * 释放连接  
     * freeConnection  
     * @param name  
     * @param con  
     */  
    public static void freeConn (String name,Connection con){   
        freeConnection(con);   
    }   
   
}

细心的朋友可以能回看到它还需要一个xml的文件 不错正是需要一个mssql.xml的配置文件 下面吧mssql.xml粘出来
mssql.xml
<?xml version="1.0" encoding="gb2312"?>
<DataBase>
 <link>
  <Driver>com.microsoft.jdbc.sqlserver.SQLServerDriver</Driver>
   <URL>jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=test</URL>
   <UserName>sa</UserName>
   <Password>love</Password>
 </link>
</DataBase>
看到没 简单的不能再简单的了,这个不用我多做解说了吧!
下面简单的给大家说说Mssql.class这个类 ,当有第一个用户和数据库 建立连接的时候回开启连接池,并且去调用loadXml();方法,这个方法的任务是去解析mssql.xml文件,注意这个mssql.xml的文件一定要放到你的成的WEB-INF/mssql.xml 放到这里,否则就找不到配置文件了,呵呵,一但连接池启动了,除非我们人为的去调用ShutdownPool()方法,否则,连接池开启了几不会关闭,除非你的服务器重新启动,当第一个用户和数据库建立连接的时候又会开启连接池!但是现在这个类还不够人性化,我们在去写一个MsManager的类

MsManager.java
/*
 * MsManager.java
 *
 * Created on 2007年10月23日, 下午1:21
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package cn.CCmingzhou.db;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
 *冷漠大神 qq:361619004
 * @author Angel
 */
public class MsManager {
   
    /** Creates a new instance of MsManager */
    public MsManager() {
    }
    Connection conn=null;
    Statement stmt=null;
    Mssql ms=new Mssql();
   
   
     /**
     *查询方法 传进去一个查询的sql语句
     *返回一个ResultSet结果集
     */
    public ResultSet query(String sql)
    {
        ResultSet rs=null;
        conn=ms.getConnection();
        try
        {
           stmt=conn.createStatement();
            rs=stmt.executeQuery(sql);
        }catch(SQLException e)
        {
            e.printStackTrace();
        }
        return rs;
    }
    /**
     *增 删 改 方法 传进去一个增 删 改 的sql语句 会返回一个 boolean值
     *当boolean值返回true时 sql执行成功 false则失败,请检查你的sql语法。
     */
    public boolean update(String sql)
    {
        boolean check=false;
        conn=ms.getConnection();
        try
        {
            stmt=conn.createStatement();
            int i=0;
            i=stmt.executeUpdate(sql);
            if(i!=0)
                check=true;
        }catch(SQLException e)
        {
            e.printStackTrace();
        }
        return check;
    }
    /**
     * 释放连接 把conn 对象释放掉!
     */
    public void close()
    {
        ms.freeConnection(conn);
    }
   
      
}
这样就人性化了吧,我们用的时候直接创建一个MsManager类的一个对象,调用query()或update() 调用完了在调用close()释放资源就一切OK了 ,是不是很简单啊,这样Mssql 我们就永远不用去动它了,在这里和大家说一下,这里并没有体现出最大连接数和最大活跃数还有最小连接数的感念,但是实现起来并不难,为什么不去实现它,现在呢,我们用的时候就去池里创建一个连接,用完了就释放掉,如果你设定了最大连接数,那么超过了最大连接数的时候就会发生异常,所以现在的程序有一个自适应的概念,也就是说你这么去实现的你的程序的话,无论你的程序访问的人多或是少都不出错误,所以我觉的这么实现很合理,如果大家有好的实现也告诉我哈,一起交流技术嘛!

 

作者:高秋
网名:冷漠大神
Qq:361619004
Mail:hackq@163.com
Time:2007年11月2日星期五
 

自己封装的dbcp连接池封装,可以同时连接多个数据库 这是我自己封装的,同时可以允许连接多个数据库,做的不是很严谨,希望又能力有时间的同仁把程序做完。 立即下载

相关推荐

相机标定-机器视觉基础(理论推导、Halcon和OpenCV相机标定)

相机标定是获得目标工件精准坐标信息的基础。首先,必须进行相机内参标定,构建一个模型消除图像畸变;其次,需要对相机和机器人的映射关系进行手眼标定,构建一个模型将图像坐标系上的点映射到世界坐标系。主要分为背景知识、相机内外参模型推导、编程代码实现三个部分。

beyond951的博客 7301

DBCP连接池的使用小结

**JDBC开发中为了节省资源,我们一般都会利用Connection连接池。也就是在访问数据的时候创建一个集合用来存放Connection对象,里面的对象不需要不停的创建和释放资源,这样就达到了节省计算机资源的目的。 自定义连接池的步骤: 1.自定义一个类实现DataSource接口; 2.编写该类的构造方法,在构造方法中创建Connectcion对象,并添加到集合中。(一般会定义一个Link

AaronWang0920的博客 4166

微信小程序获取用户手机号全流程实战(附完整代码)

本文详细介绍了微信小程序获取用户手机号的全流程实战,包括前端授权、后端解密及安全合规要点。通过传统授权按钮和新版手机号快速验证组件两种方案,帮助开发者高效实现功能,并附完整代码示例。重点解析了微信小程序接口的使用技巧和常见问题解决方案,确保数据安全与用户体验。

weixin_29280219的博客 568

DBCP封装与使用——数据库增删改查

1、准备 dbcp : data base connection pool 数据库连接池 在WEB-INF–lib下的加入下面两个包: 下载链接: 链接:https://pan.baidu.com/s/1A5rF_dF31TYJLZG0Yvmh1w 密码:sf7h 2、数据库配置文件 #基本查询的设置 driverClassName=com.mysql.jdbc.Driver u...

HYeeee的博客 1274

ZEMAX学习 6.一个照相物镜的设计

曲线越平滑表示场曲越小,曲线越接近水平,系统边缘与中心对比度越接近,虚实越接近表示色差和色散越好;第1个面设计不合理,出现前后表面相交的情况,点击第1面厚度,选择边缘厚度,设置为0.1,第1面厚度被控制在0.1mm厚,系统根据这一设置始终保持第1面边缘厚度为0.1mm。要求:设计一个照相物镜,焦距f=9mm,F#为4,视场角40°;添加有效焦距操作数EFFL 9mm 权重为1,设置优化变量,如下图,ctrl+shift+o打开优化界面。报告中系统数据有效焦距为67.381mm,设计要求为9mm;

qq_24542783的博客 4710

保姆级教程:用Python脚本一键把选股结果导入通达信自选股(附完整代码)

本文提供了一份详细的Python自动化教程,教你如何将选股结果一键导入通达信自选股。通过解析通达信文件结构、编写Python脚本实现股票代码转换和批量导入,大幅提升量化交易效率。教程包含完整代码示例,特别适合使用通达信(TDX)的投资者和量化交易开发者。

weixin_30915951的博客 358

DBCP、DBUtils使用

一、使用DBCP创建连接池,需要两个jar包。 commons-pool.jar  commons-dbcp-1.2.2.jar #连接设置         driverClassName=com.mysql.jdbc.Driver         url=jdbc:mysql://localhost:3306/xxx         username=root         pa

RowandJJ 4151

新版CKA2020-2020-10-13-真题试卷

2020年10月13日 真题 新版CKA考试已于2020年9月1日正式上线! 考试模式:线上考试 考试时间:2小时 认证有效期:3年 软件版本:Kubernetes v1.19 重考政策:可接受1次重考 经验水平:中級 题目数量:17题 01 Task - 英文 Create a new ClusterRole named deployment-clusterrole that only allows the creation of the following resource types: Depl

随笔记录-分享&记忆 2393

(JDBC三)封装连接

一、生成连接方法:在通过控制台对数据库表进行操作时,每个增删改查动作都需要重新连接数据库,重新创建PrepareStatement对象如果有结果集的话还需要重新创建结果集,而这些代码是很冗长的,并且如果改变了数据库的用户名及密码时我们需要在每个用到了用户名及密码的位置都进行修改,那么既然如此我们就可以将这些重复进行的代码提取出来形成数据库单元类,让这个类进行数据库的连接及创建PrepareStat...

z774884795的博客 379

多体动力学分析软件:ADAMS_(15).多体动力学建模与分析实践

1. 在工具栏中选择“Body”工具。2. 在图形窗口中点击鼠标左键选择刚体的中心点。3. 按住鼠标左键拖动,定义刚体的尺寸。4. 在弹出的属性对话框中设置刚体的质量、惯性参数等。关节是连接刚体的关键部件,定义关节时需要选择合适的关节类型并设置关节的参数。约束是对刚体运动的限制,定义约束时需要选择合适的约束类型并设置约束的参数。1. 在主菜单中选择“Model” > “Optimization” > “Objective Function”。

kkchenjj的博客 1310

基于STM32、HAL库、I2C接口的姿态传感器/陀螺仪之ICM-42670-P驱动 C语言程序设计

/ 设置加速度计和陀螺仪的工作模式。// 读取加速度计和陀螺仪数据。

corlin6688的博客 1180

使用ThreadLocal、Apache的dbutils的QueryRunner和dbcp2数据库连接池的BasicDataSource封装操作数据库工具...

package hjp.smart4j.framework.helper; import hjp.smart4j.framework.util.CollectionUtil; import hjp.smart4j.framework.util.PropsUtil; import org.apache.commons.dbcp2.BasicDataSource; i...

aa8102980的博客 173

VisionPro 机器视觉案例 之 彩色保险丝个数统计

CogColorSegmenterTool CogColorMatchTool

机器视觉李小白的博客 2352

《JDBC连接技术》"江南月"(二)常用的连接池dbcp、c3p0、druid

我们应该知道,在进行数据库连接的时候,是极其消耗时间和性能的。如果每次对数据库进行操作,都要进行一次Connection,那么,可想而知,性能有多么的差。你要知道,一个大型的web应用,同一时间就可能有成千上万个访问数据库的请求,并且数据库服务器能供同时创建的Connection数目也是有限的。 因此,问题来了。怎么最大限度的利用这些有限资源呢? 数据库连接池的技术出现,解决了这一问题。连接池...

从明老师的博客 566

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

数据库连接池(Druid、DBCP、C3P0)和Apache组织DBUtils工具类使用

数据库连接池(Druid、DBCP、C3P0)和Apache组织DBUtils工具类使用 第一节:自定义连接池 使用JDBC操作数据库,需要建立Connection,使用传统的JDBC操作需要每次创建Connection,创建Connection是一个非常性能和消耗时间的过程,我们需要在提高程序性能,那么就需要减少每次创建创建连接带来的负面影响,解决这个问题我们将利用池子概念,预先创建一些链接放入池子中,如果需要操作数据,不用创建新的Connection,只需要在池子中获取即可,使用完毕放入池子!这样就形

qq_37867421的博客 382

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

高龄白菜JAVA学习第五十一天(JDBC(5)数据库连接池:DBCP|Durid|操作封装|DBUtils|)

一、DBCP 1、数据库连接池管理相关属性 dbcp连接池常用基本配置属性 1.initialSize :连接池启动时创建的初始化连接数量(默认值为0) 2.maxActive :连接池中可同时连接的最大的连接数(默认值为8,调整为20,高峰单机器在20并发左右,自己根据应用场景定) 3.maxIdle:连接池中最大的空闲的连接数,超过的空闲连接将被释放,如果设置为负数表示不限制(默认为8个,maxIdle不能设置太小,因为假如在高负载的情况下,连接的打开时间比关闭的时间快,会引起连接池

mangosea的博客 153

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

2018.9.14

apached的commonds组件: commons-dbutils-1.4.jar:封装并简化了JDBC commons-dbcp-1.4.jar:apache commons提供的数据连接池组件,命名为DBCP commons-pool-1.3.jar:DBCP连接池依赖该jar包 mysql-connector-java-5.1.28-bin.jar:MySQL的JDBC驱动包,用...

Waiting_Police_code的博客 206

IDEA学习记录22--数据库连接池和Apache DBUtils实战

1、Apache dbcp数据库连接池封装 DataSourceUtils 1)、配置文件database.properties 在src目录下 注意mysql8与mysql5配置文件的不同写法!! driverClassName = com.mysql.cj.jdbc.Driver url = jdbc:mysql://127.0.0.1:3306/xd_class?userUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B

AMWICD的博客 1994

原生jdbc操作

1:加入dbcp连接池依赖 <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-dbcp2</artifactId> <version>2.1.1</version> </dependency> ...

weixin_30364147的博客 131

Apache Commons 工具类介绍及简单使用

Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动。下面是我这几年做开发过程中自己用过的工具类做简单介绍。 组件 功能介绍 BeanUtils 提供了对于JavaBean进行各种操作,克隆对象,属性等等. Betwixt XML与Java对象之间相互转换. Codec 处理常用的编码方法的工具类包例如DES、SHA1、MD5、Base64等. Collections java集合框架操作. Compress .

胡杰的专栏 8912

小滴课堂-学习笔记:JDBC进阶之数据库操作工具类和池化思想

愿景:"让编程不再难学,让技术与生活更加有趣" 更多架构课程请访问 xdclass.net 目录 第1集 数据库工具类自定义DBUtils封装 第2集 性能优化之池化思想你知道多少 第3集 javaweb基础+JDBC知识总结回顾 第4集 市面上主流的DB工具类和数据库连接池介绍 数据库连接池和Apache DBUtils实战 第1集 Apache dbcp数据库连接池封装DataSourceUtils案例实战 第2集 Apache dbutils工具快速入门实战 第3集 Be...

dev666的博客 441

java流行使用开源的数据库连接池DBCP

/定义一个静态的driver常量将mysql数据库驱动地址作为字符串初值赋值可以myeclipse中找到。//定义一个静态的driver常量将mysql数据库驱动地址作为字符串初值赋值可以myeclipse中找到。//初始创建多少个连接。

2401_89284451的博客 335

连接池

连接池 概述:连接池就是一个装有与数据库连接的容器,通过连接池预先同数据库建立一些连接放在内存中,当应用程序需要建立连接时直接从连接池中申请一个使用,使用完毕后在归还给连接池 为什么要有连接池? 建立与数据库的连接是一种非常耗时,耗资源的行为,可以通过使用连接池早已建立好的连接优化这一行为 三种常见的连接池:DBCP连接池,c3p0连接池,阿里德鲁伊Druid连接池 DBCP连接池 使用步骤:...

weiii_的博客 504

JDBC 封装增删改查方法

package cn.itsource; import java.io.IOException; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLExcep...

neversayno_yl的博客 507
上一篇: Jsp分页组件制作
下一篇: 冷漠大神中间件
hackq
博客等级 码龄20年 19粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值