`
清泉风影
  • 浏览: 108001 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JavaBean数据库连接池

阅读更多

主要由下面三个文件组成:

db.properties


driver=sun.jdbc.odbc.JdbcOdbcDriver
url=Jdbc:Odbc:catalog
username=catalog
password=catalog
size=2
maxsize=4

 

java 代码
  1. package database;   
  2.   
  3.   
  4. import java.io.*;   
  5. import java.sql.*;   
  6. import java.util.*;   
  7.   
  8. //对数据库连接池进行管理与维护   
  9.   
  10. public class ConnectionPool extends Thread   
  11. {   
  12.   //保存缓存的数据库连接对象   
  13.   private ArrayList pool=new ArrayList();   
  14.   
  15.   private String driver;   
  16.   private String url;   
  17.   private String username;   
  18.   private String password;   
  19.   private int size;   
  20.   private int maxsize;   
  21.   
  22.   
  23.   private void initJDBC()   
  24.   {   
  25.     try  
  26.     {   
  27.       //从配置文件中加载数据库驱动程序信息   
  28.       InputStream fin=this.getClass().getResourceAsStream("/db.properties");   
  29.       Properties prop=new Properties();   
  30.       prop.load(fin);   
  31.   
  32.   
  33.       driver=prop.getProperty("driver","sun.jdbc.odbc.JdbcOdbcDriver");   
  34.       url=prop.getProperty("url","jdbc:odbc:catalog");   
  35.       username=prop.getProperty("username","catalog");   
  36.       password=prop.getProperty("password","catalog");   
  37.       size=Integer.parseInt(prop.getProperty("size","2"));   
  38.       maxsize=Integer.parseInt(prop.getProperty("maxsize","4"));   
  39.   
  40.       Class.forName(driver);   
  41.     }   
  42.     catch(Exception e)   
  43.     {   
  44.       e.printStackTrace();   
  45.     }   
  46.   }   
  47.   //初始化数据库连接池   
  48.   private synchronized void initConnectionPool()   
  49.   {   
  50.     try  
  51.     {   
  52.       for(int i=0;i       {   
  53.         Connection con=DriverManager.getConnection(url,username,password);   
  54.         con.setAutoCommit(false);   
  55.         PooledConnection pcon=new PooledConnection(con);   
  56.         pcon.setInuse(false);   
  57.   
  58.   
  59.         pool.add(pcon);   
  60.       }   
  61.     }   
  62.     catch(Exception e)   
  63.     {   
  64.       e.printStackTrace();   
  65.     }   
  66.   }   
  67.   
  68.   //申请数据库连接对象   
  69.   public synchronized Connection applyConnection()   
  70.   {   
  71.     Connection con=null;   
  72.     for(int i=pool.size()-1;i>=0;i--)   
  73.     {   
  74.       PooledConnection pcon=(PooledConnection)pool.get(i);   
  75.       if(!pcon.isInuse())   
  76.       {   
  77.         pcon.setInuse(true);   
  78.         return pcon.getConnection();   
  79.       }   
  80.     }   
  81.     try  
  82.     {   
  83.       con=DriverManager.getConnection(url,username,password);   
  84.       con.setAutoCommit(false);   
  85.   
  86.       PooledConnection pcon=new PooledConnection(con);   
  87.       pcon.setInuse(true);   
  88.   
  89.       pool.add(pcon);   
  90.     }   
  91.     catch(Exception e)   
  92.     {   
  93.       e.printStackTrace();   
  94.     }   
  95.     return con;   
  96.   }   
  97.   
  98.   //释放数据库连接对象   
  99.   public synchronized void releaseConnection(Connection con)   
  100.   {   
  101.     for(int i=pool.size()-1;i>=0;i--)   
  102.     {   
  103.       PooledConnection pcon=(PooledConnection)pool.get(i);   
  104.       if(pcon.getConnection().equals(con))   
  105.       {   
  106.         pcon.setInuse(false);   
  107.         return;   
  108.       }   
  109.     }   
  110.   }   
  111.   
  112.   
  113.   //关闭数据库连接池   
  114.   public synchronized void closeConnectionPool()   
  115.   {   
  116.     try  
  117.     {   
  118.       for(int i=pool.size()-1;i>=0;i--)   
  119.       {   
  120.         PooledConnection pcon=(PooledConnection)pool.get(i);   
  121.         if(pcon.isInuse())   
  122.         {   
  123.           Thread.sleep(500);   
  124.         }   
  125.         pcon.close();   
  126.         pool.remove(pcon);   
  127.       }   
  128.     }   
  129.     catch(Exception e)   
  130.     {   
  131.       e.printStackTrace();   
  132.     }   
  133.   }   
  134.   
  135.   public void run()   
  136.   {   
  137.     while(true)   
  138.     {   
  139.       try  
  140.       {   
  141.         synchronized(this)   
  142.         {   
  143.           while(pool.size()>maxsize)   
  144.           {   
  145.             PooledConnection pcon=null;   
  146.   
  147.             for(int i=pool.size()-1;i>=0;i--)   
  148.             {   
  149.               PooledConnection pn=(PooledConnection) pool.get(i);   
  150.               if(!pn.isInuse())   
  151.               {   
  152.                 pcon=pn;   
  153.               }   
  154.               if(pcon!=null)   
  155.               {   
  156.                 pool.remove(pcon);   
  157.               }   
  158.               else  
  159.               {   
  160.                 break;   
  161.               }   
  162.             }   
  163.           }   
  164.         }   
  165.         Thread.sleep(1000*60);   
  166.       }   
  167.       catch(Exception e)   
  168.       {   
  169.         e.printStackTrace();   
  170.       }   
  171.     }   
  172.   }   
  173.   
  174.   private static ConnectionPool conPool=new ConnectionPool();   
  175.   private ConnectionPool()   
  176.   {   
  177.     this.initJDBC();   
  178.     this.initConnectionPool();   
  179.   
  180.     this.start();   
  181.   }   
  182.   
  183.   
  184.   public static ConnectionPool getInstance()   
  185.   {   
  186.     return conPool;   
  187.   }   
  188. }   
  189.   

 

PooledConnection.java

java 代码
  1. package database;   
  2.   
  3. import java.sql.*;   
  4.   
  5.   
  6. public class PooledConnection   
  7. {   
  8.   //保存真实的数据库连接对象   
  9.   private Connection con;   
  10.   //设立一个标志位,表示此数据库连接对象是否处于空闲状态   
  11.   private boolean inuse;   
  12.   
  13.   public PooledConnection(Connection con)   
  14.   {   
  15.     this.con=con;   
  16.   }   
  17.   public Connection getConnection()   
  18.   {   
  19.     return con;   
  20.   }   
  21.   //设置数据库连接对象处于使用状态   
  22.   public void setInuse(boolean inuse)   
  23.   {   
  24.     this.inuse=inuse;   
  25.   }   
  26.   //判断数据库连接对象是否为使用状态   
  27.   public boolean isInuse()   
  28.   {   
  29.     return this.inuse;   
  30.   }   
  31.   //关闭真实的数据库连接对象   
  32.   public void close()   
  33.   {   
  34.     try  
  35.     {   
  36.       if(con!=null)   
  37.       {   
  38.         con.close();   
  39.       }   
  40.       con=null;   
  41.     }   
  42.     catch(Exception e)   
  43.     {   
  44.       e.printStackTrace();   
  45.     }   
  46.   }   
  47. }   
  48.   
  49.   
  50.  ConnectionPool.java  

  • catalog.rar (999.3 KB)
  • 描述: 数据库连接池的实现例子
  • 下载次数: 140
分享到:
评论

相关推荐

    Java jdbc数据库连接池总结

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

    数据库连接池的图解原理

    ### 数据库连接池的图解原理详解 #### 一、引言 在现代Web应用程序开发中,数据库连接池是一项至关重要的技术。它不仅能够显著提高应用程序的性能,还能有效管理数据库资源,避免资源浪费和系统崩溃的风险。本文将...

    JavaWeb开发技术-数据库连接池.pptx

    在JavaWeb开发中,数据库连接池可以使用JavaBean、Servlet、JSP、XML等技术实现。例如,使用JavaBean可以创建一个数据库连接池,提供给应用程序使用。使用Servlet可以实现数据库连接池的管理和分配。使用JSP可以实现...

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

    【标题】:“基于JDBC的数据库连接池技术研究与应用” 【描述】:本文主要探讨了在Java环境中,如何利用JDBC和数据库连接池技术来优化Web应用程序对数据库的访问,以提高系统性能和资源利用率。 【标签】:JDBC, ...

    javajdbc数据库连接池总结.pdf

    Java JDBC 数据库连接池是一种优化数据库访问效率的技术,它解决了传统JDBC模式中频繁创建和关闭数据库连接导致的性能问题。随着互联网技术的发展,B/S架构的3层开发模式成为主流,Java的Servlet+JSP+JavaBean技术因...

    数据库连接池详细说明.doc

    上述文档描述了一个基本的数据库连接池实现方式,包括配置文件的结构、JavaBean类的使用以及连接池类的设计思路。在实际开发中,可以使用成熟的连接池库,如Apache的DBCP、C3P0或HikariCP,它们提供了更完善的连接...

    基于JDBC语句分享的数据库连接池.pdf

    2. **编写JavaBean类**:创建一个用于封装数据库连接池逻辑的JavaBean类。这个类应该包括连接池的初始化、获取连接、释放连接等方法。此外,还需要实现Statement对象的管理和复用。 3. **JSP页面集成**:在JSP页面中...

    Java_jdbc数据库连接池总结.doc

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

    基于JSP的数据库连接池的研究系统设计与实现毕业设计(源代码+项目报告).zip

    在本毕业设计中,主题聚焦于“基于JSP的数据库连接池的研究系统设计与实现”。JSP(JavaServer Pages)是一种动态网页技术,它允许开发者将Java代码嵌入到HTML页面中,从而实现服务器端的业务逻辑处理。数据库连接池...

    JSP分页代码-数据库连接池+JavaBean+JSP+SQL Server+JDBC3.0的数据库分页技术

    public Pagi()//定义构造器,初始化每页显示的主题数和数据库的连接。 { intPageSize=4; //每页显示的记录数目 db = new DB(); } //Countsql:总记录的Query字符串。[形式为select count(*) from tablename] //...

    javabean数据库连接

    - 应考虑使用连接池管理数据库连接,避免频繁创建和销毁连接带来的性能开销。 - **异常处理**: - 在生产环境中,应增强异常处理机制,提供更详细的错误信息或日志记录,以便于问题排查。 - **字符编码**: - 注意...

    javabean连接数据库SQL2000

    在实际应用中,为了遵循最佳实践,我们应考虑使用连接池,如Apache Commons DBCP或C3P0,以提高性能和管理数据库连接。 在处理数据库操作时,可以创建其他JavaBean方法,例如执行SQL查询、更新、插入和删除等。这些...

    数据库连接池

    ### 数据库连接池的核心概念与配置实践 #### 一、数据库连接池的重要性 数据库连接池是一种用于管理数据库连接的技术,其主要目的是为了提高应用程序访问数据库的效率和性能。在实际应用中,每次从应用程序到...

    基于三层架构和JDBC数据库连接池的商品管理系统

    《基于三层架构和JDBC数据库连接池的商品管理系统》是一个典型的Java Web项目,它采用标准的MVC(Model-View-Controller)设计模式,通过三层架构进行业务逻辑的组织,以提高系统的可维护性和可扩展性。在这个系统中...

Global site tag (gtag.js) - Google Analytics