`
itwoody
  • 浏览: 42634 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

Java jdbc数据库连接池总结(二)[转]

阅读更多
-------------------------------------------
?DBConnectionManager?.java
------------------------------------------

package com.chunkyo.db;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Properties;
import java.util.Vector;

public class DBConnectionManager {
?static private DBConnectionManager instance;//唯一数据库连接池管理实例类
?static private int clients;???????????????? //客户连接数
?private Vector drivers? = new Vector();//驱动信息
?private Hashtable pools=new Hashtable();//连接池
?
?
?public DBConnectionManager() {
??// TODO Auto-generated constructor stub
??this.init();
?}
?
?static synchronized public DBConnectionManager getInstance()
?{
??if(instance==null)
??{
???instance=new DBConnectionManager();
??}
??return instance;
??
?}
?
?public void freeConnection(String name, Connection con)
?{
??DBConnectionPool pool=(DBConnectionPool)pools.get(name);//根据关键名字得到连接池
??if(pool!=null)
??pool.freeConnection(con);//释放连接
?}
?
?public Connection getConnection(String name)
?{
??DBConnectionPool pool=null;
??Connection con=null;
??pool=(DBConnectionPool)pools.get(name);//从名字中获取连接池
??con=pool.getConnection();//从选定的连接池中获得连接
??if(con!=null)
??System.out.println("得到连接。。。");
??return con;
?}
?
?public Connection getConnection(String name, long timeout)
?{
??DBConnectionPool pool=null;
??Connection con=null;
??pool=(DBConnectionPool)pools.get(name);//从名字中获取连接池
??con=pool.getConnection(timeout);//从选定的连接池中获得连接
??System.out.println("得到连接。。。");
??return con;
?}
?
?public synchronized void release()
?{
??Enumeration allpools=pools.elements();
??while(allpools.hasMoreElements())
??{
???DBConnectionPool pool=(DBConnectionPool)allpools.nextElement();
???if(pool!=null)pool.release();
??}
??pools.clear();
?}
?
?private void createPools(DSConfigBean dsb)
?{
??DBConnectionPool dbpool=new DBConnectionPool();
??dbpool.setName(dsb.getName());
??dbpool.setDriver(dsb.getDriver());
??dbpool.setUrl(dsb.getUrl());
??dbpool.setUser(dsb.getUsername());
??dbpool.setPassword(dsb.getPassword());
??dbpool.setMaxConn(dsb.getMaxconn());
??System.out.println("ioio:"+dsb.getMaxconn());
??pools.put(dsb.getName(), dbpool);
?}
?
?private void init()
?{
??//加载驱动程序
??this.loadDrivers();
??//创建连接池
??Iterator alldriver=drivers.iterator();
??while(alldriver.hasNext())
??{
???this.createPools((DSConfigBean)alldriver.next());
???System.out.println("创建连接池。。。");
???
??}
??System.out.println("创建连接池完毕。。。");
?}
?
?private void loadDrivers()
?{
??ParseDSConfig pd=new ParseDSConfig();
?//读取数据库配置文件
??drivers=pd.readConfigInfo("ds.config.xml");
??System.out.println("加载驱动程序。。。");
?}
?
?public static void main(String[] args) {
??// TODO Auto-generated method stub
?}
}
----------------------------------------
DSConfigBean.java
----------------------------------------

package com.chunkyo.db;

public class DSConfigBean {
?private String type???? =""; //数据库类型
?private String name???? =""; //连接池名字
?private String driver?? =""; //数据库驱动
?private String url????? =""; //数据库url
?private String username =""; //用户名
?private String password =""; //密码
?private int maxconn? =0; //最大连接数
?
?public DSConfigBean() {
??// TODO Auto-generated constructor stub
?}
?
?public static void main(String[] args) {
??// TODO Auto-generated method stub
?}
?
?public String getDriver() {
??return driver;
?}
?
?public void setDriver(String driver) {
??this.driver = driver;
?}
?
?public int getMaxconn() {
??return maxconn;
?}
?
?public void setMaxconn(int maxconn) {
??this.maxconn = maxconn;
?}
?
?public String getName() {
??return name;
?}
?
?public void setName(String name) {
??this.name = name;
?}
?
?public String getPassword() {
??return password;
?}
?
?public void setPassword(String password) {
??this.password = password;
?}
?
?public String getType() {
??return type;
?}
?
?public void setType(String type) {
??this.type = type;
?}
?
?public String getUrl() {
??return url;
?}
?
?public void setUrl(String url) {
??this.url = url;
?}
?
?public String getUsername() {
??return username;
?}
?
?public void setUsername(String username) {
??this.username = username;
?}
}
-----------------------------------------------------
ParseDSConfig.java
-----------------------------------------------------

package com.chunkyo.db;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Vector;
import java.util.Iterator;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;

public class ParseDSConfig {
?
?public ParseDSConfig() {
??// TODO Auto-generated constructor stub
?}
?
?public Vector readConfigInfo(String path)
?{
??String rpath=this.getClass().getResource("").getPath().substring(1)+path;
??Vector dsConfig=null;
??FileInputStream fi = null;
??try
??{
???fi=new FileInputStream(rpath);//读取路径文件
???dsConfig=new Vector();
???SAXBuilder sb=new SAXBuilder();
???Document doc=sb.build(fi);
???Element root=doc.getRootElement();
???List pools=root.getChildren();
???Element pool=null;
???Iterator allPool=pools.iterator();
???while(allPool.hasNext())
???{
????pool=(Element)allPool.next();
????DSConfigBean dscBean=new DSConfigBean();
????dscBean.setType(pool.getChild("type").getText());
????dscBean.setName(pool.getChild("name").getText());
????System.out.println(dscBean.getName());
????dscBean.setDriver(pool.getChild("driver").getText());
????dscBean.setUrl(pool.getChild("url").getText());
????dscBean.setUsername(pool.getChild("username").getText());
????dscBean.setPassword(pool.getChild("password").getText());
????dscBean.setMaxconn(Integer.parseInt(pool.getChild("maxconn").getText()));
????dsConfig.add(dscBean);
???}
???
??} catch (FileNotFoundException e) {
???// TODO Auto-generated catch block
???e.printStackTrace();
??} catch (JDOMException e) {
???// TODO Auto-generated catch block
???e.printStackTrace();
??} catch (IOException e) {
???// TODO Auto-generated catch block
???e.printStackTrace();
??}
??
??finally
??{
???try {
????fi.close();
???} catch (IOException e) {
????// TODO Auto-generated catch block
????e.printStackTrace();
???}
??}
??
??return dsConfig;
?}

?public void modifyConfigInfo(String path,DSConfigBean dsb) throws Exception
?{
??String rpath=this.getClass().getResource("").getPath().substring(1)+path;
??FileInputStream fi=null; //读出
??FileOutputStream fo=null; //写入
??
?}

?public void addConfigInfo(String path,DSConfigBean dsb)
?{
??String rpath=this.getClass().getResource("").getPath().substring(1)+path;
??FileInputStream fi=null;
??FileOutputStream fo=null;
??try
??{
???fi=new FileInputStream(rpath);//读取xml流
???
???SAXBuilder sb=new SAXBuilder();
???
???Document doc=sb.build(fi); //得到xml
???Element root=doc.getRootElement();
???List pools=root.getChildren();//得到xml子树
???
???Element newpool=new Element("pool"); //创建新连接池
???
???Element pooltype=new Element("type"); //设置连接池类型
???pooltype.setText(dsb.getType());
???newpool.addContent(pooltype);
???
???Element poolname=new Element("name");//设置连接池名字
???poolname.setText(dsb.getName());
???newpool.addContent(poolname);
???
???Element pooldriver=new Element("driver"); //设置连接池驱动
???pooldriver.addContent(dsb.getDriver());
???newpool.addContent(pooldriver);
???
???Element poolurl=new Element("url");//设置连接池url
???poolurl.setText(dsb.getUrl());
???newpool.addContent(poolurl);
???
???Element poolusername=new Element("username");//设置连接池用户名
???poolusername.setText(dsb.getUsername());
???newpool.addContent(poolusername);
???
???Element poolpassword=new Element("password");//设置连接池密码
???poolpassword.setText(dsb.getPassword());
???newpool.addContent(poolpassword);
???
???Element poolmaxconn=new Element("maxconn");//设置连接池最大连接
???poolmaxconn.setText(String.valueOf(dsb.getMaxconn()));
???newpool.addContent(poolmaxconn);
???pools.add(newpool);//将child添加到root
???Format format = Format.getPrettyFormat();
????? format.setIndent("");
????? format.setEncoding("utf-8");
????? XMLOutputter outp = new XMLOutputter(format);
????? fo = new FileOutputStream(rpath);
????? outp.output(doc, fo);
??} catch (FileNotFoundException e) {
???// TODO Auto-generated catch block
???e.printStackTrace();
??} catch (JDOMException e) {
???// TODO Auto-generated catch block
???e.printStackTrace();
??} catch (IOException e) {
???// TODO Auto-generated catch block
???e.printStackTrace();
??}
??finally
??{
???
??}
?}
?
?public void delConfigInfo(String path,String name)
?{
??String rpath=this.getClass().getResource("").getPath().substring(1)+path;
??FileInputStream fi = null;
??FileOutputStream fo=null;
??try
??{
???fi=new FileInputStream(rpath);//读取路径文件
???SAXBuilder sb=new SAXBuilder();
???Document doc=sb.build(fi);
???Element root=doc.getRootElement();
???List pools=root.getChildren();
???Element pool=null;
???Iterator allPool=pools.iterator();
???while(allPool.hasNext())
???{
????pool=(Element)allPool.next();
????if(pool.getChild("name").getText().equals(name))
????{
?????pools.remove(pool);
?????break;
????}
???}
???Format format = Format.getPrettyFormat();
????? format.setIndent("");
????? format.setEncoding("utf-8");
????? XMLOutputter outp = new XMLOutputter(format);
????? fo = new FileOutputStream(rpath);
????? outp.output(doc, fo);
???
??} catch (FileNotFoundException e) {
???// TODO Auto-generated catch block
???e.printStackTrace();
??} catch (JDOMException e) {
???// TODO Auto-generated catch block
???e.printStackTrace();
??} catch (IOException e) {
???// TODO Auto-generated catch block
???e.printStackTrace();
??}
??
??finally
??{
???try {
????fi.close();
???} catch (IOException e) {
????// TODO Auto-generated catch block
????e.printStackTrace();
???}
??}
?}
?
?public static void main(String[] args) throws Exception {
??// TODO Auto-generated method stub
??ParseDSConfig pd=new ParseDSConfig();
??String path="ds.config.xml";
??pd.readConfigInfo(path);
??//pd.delConfigInfo(path, "tj012006");
??DSConfigBean dsb=new DSConfigBean();
??dsb.setType("oracle");
??dsb.setName("yyy004");
??dsb.setDriver("org.oracle.jdbc");
??dsb.setUrl("jdbc:oracle://localhost");
??dsb.setUsername("sa");
??dsb.setPassword("");
??dsb.setMaxconn(1000);
??pd.addConfigInfo(path, dsb);
??pd.delConfigInfo(path, "yyy001");
?}
}

--------------------------------------
ds.config.xml?? 配置文件
--------------------------------------


<ds-config>
<pool>
<type>mysql</type>
<name>user</name>
<driver>com.mysql.jdbc.driver</driver>
<url>jdbc:mysql://localhost:3306/user</url>
<username>sa</username>
<password>123456</password>
<maxconn>100</maxconn>
</pool>
<pool>
<type>mysql</type>
<name>user2</name>
<driver>com.mysql.jdbc.driver</driver>
<url>jdbc:mysql://localhost:3306/user2</url>
<username>sa</username>
<password>1234</password>
<maxconn>10</maxconn>
</pool>
<pool>
<type>sql2000</type>
<name>books</name>
<driver>com.microsoft.sqlserver.driver</driver>
<url>jdbc:sqlserver://localhost:1433/books:databasename=books</url>
<username>sa</username>
<password></password>
<maxconn>100</maxconn>
</pool>
</ds-config>


3. 连接池的使用
? 1。Connection的获得和释放
? DBConnectionManager?? connectionMan=DBConnectionManager?.getInstance();//得到唯一实例
?? //得到连接
?? String name="mysql";//从上下文得到你要访问的数据库的名字
?? Connection? con=connectionMan.getConnection(name);
? //使用
? 。。。。。。。
? // 使用完毕
?connectionMan.freeConnection(name,con);//释放,但并未断开连接
?2。数据库连接的动态增加和连接池的动态增加
????? 1。调用xml操作增加类

??????2。重新实例华连接池管理池类
转自:http://www.blogjava.net/chunkyo/archive/2007/01/16/94266.html
分享到:
评论

相关推荐

    Java jdbc数据库连接池总结

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

    java_jdbc数据库连接池总结

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

    Java-jdbc数据库连接池总结.doc

    总的来说,Java JDBC数据库连接池是提升Web应用性能的重要技术,通过有效的连接管理和复用,它降低了数据库操作的开销,提升了系统的稳定性和响应速度。在开发过程中,选择合适的连接池实现,并对其进行合理配置,是...

    Java jdbc数据库连接池总结.doc

    总结来说,Java JDBC数据库连接池是解决Web应用中数据库访问性能问题的有效工具,通过统一管理和复用数据库连接,降低了系统资源消耗,提高了应用的响应速度和稳定性。合理配置和使用连接池,对于构建高效、稳定的...

    实现jdbc数据库连接池

    此类非常简单,免去了网上众多资料里所说的麻烦的tomcat配置,更强...不仅oracle,mysql,sqlserver2000都行,因为它依据的是你自己连接数据库的驱动。当然首先你要保证你拥有一个能连接自己数据库的对应驱动类。如下面以

    Java jdbc数据库连接池总结2

    本篇文章将深入探讨Java JDBC数据库连接池的工作原理及其重要性。 ### 数据库连接池的工作原理 1. **初始化**: 应用程序启动时,连接池会预先创建一定数量的数据库连接并保存在池中。这些连接被称为“空闲连接”。...

    javajdbc数据库连接池总结.pdf

    总之,Java JDBC数据库连接池是提高Web应用性能、优化数据库资源管理的重要手段。通过连接池,不仅可以减少数据库连接的创建和销毁开销,还能有效控制并发下的资源分配,从而提高系统的稳定性和响应速度。

    Java_jdbc数据库连接池总结

    Java JDBC数据库连接池总结 Java JDBC(Java Database Connectivity)是Java语言访问数据库的标准接口,它允许应用程序通过编写Java代码来与各种数据库进行交互。在Web应用程序中,由于B/S架构的普及,Java JDBC...

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

    本资源集合了常用的JDBC数据库连接jar包,以及一些知名的数据库连接池实现,如dbcp和c3p0,这对于开发人员来说是非常宝贵的资源。 首先,让我们了解一下JDBC。JDBC提供了一套标准的API,包括接口和类,使得开发者...

    Java_jdbc数据库连接池总结.doc

    ### Java JDBC 数据库连接池详解 #### 一、引言 随着互联网技术的快速发展和广泛应用,Web应用程序的需求日益增加,特别是在企业级应用和电子商务领域。传统C/S(客户端/服务器)架构逐步被B/S(浏览器/服务器)...

    java实现数据库连接池

    二、Java 实现数据库连接池的原理 Java 实现数据库连接池的原理是使用 Java 语言编写的 ConnectionPool 类,该类负责管理和分配数据库连接。该类的主要功能包括: 1. 连接池的创建:在 ConnectionPool 类中,使用 ...

    JDBC数据库连接池总结.doc

    JDBC数据库连接池总结 一、JDBC数据库连接池概述 在基于B/S架构的三层开发模式中,Java应用程序访问数据库的基本原理是通过JDBC(Java DataBase Connection)技术。JDBC是一种“开放”的方案,为数据库应用开发...

    JDBC数据库连接池总结.pdf

    【JDBC数据库连接池总结】 在Java开发中,JDBC(Java Database Connectivity)是用于连接应用程序和数据库的关键技术。JDBC提供了一套API,使得开发者能够以标准的方式编写数据库交互代码。然而,直接使用JDBC在高...

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

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

    JDBC数据库连接池实现原理

    实现JDBC数据库连接池的基本步骤如下: 1. **选择连接池实现**:首先,我们需要选择一个合适的数据库连接池实现,如Apache的DBCP、C3P0、HikariCP或Tomcat JDBC连接池等。这些连接池库提供了管理和维护数据库连接的...

    Java 的JDBC 数据库连接池实现方法.zip_J2EE JSP_connection pool jdbc_java 连接池

    J2EE 程序员一般都有现成的应用服务器所带的JDBC 数据库连接池,不过对于开发一般的 Java Application 、 Applet 或者 JSP、velocity 时,我们可用的JDBC 数据库连接池并不多,并且一般性能都不好。我们可以自己写一...

    jdbc数据库连接池工程文件

    **JDBC数据库连接池工程文件详解** 在Java开发中,JDBC(Java Database Connectivity)是用于与各种数据库交互的标准API。然而,频繁地创建和关闭数据库连接会消耗大量的系统资源,影响应用程序性能。为了解决这个...

    Java的JDBC数据库连接池实现方法.doc

    Java JDBC数据库连接池实现方法 Java 数据库连接池是指在 Java 应用程序中对数据库连接的管理和优化,提高数据库访问的效率和性能。 Java 中的数据库连接池可以分为两类:一种是基于应用服务器的连接池,另一种是...

    jdbc数据库连接池

    总结来说,JDBC数据库连接池是提高Java应用程序数据库操作效率的关键技术。理解其工作原理,选择合适的连接池组件,并进行合理配置和优化,能够显著提升系统的性能和稳定性。在实际项目中,开发者应根据业务需求和...

Global site tag (gtag.js) - Google Analytics