主要由下面三个文件组成:
db.properties
driver=sun.jdbc.odbc.JdbcOdbcDriver
url=Jdbc:Odbc:catalog
username=catalog
password=catalog
size=2
maxsize=4
java 代码
- package database;
-
-
- import java.io.*;
- import java.sql.*;
- import java.util.*;
-
-
-
- public class ConnectionPool extends Thread
- {
-
- private ArrayList pool=new ArrayList();
-
- private String driver;
- private String url;
- private String username;
- private String password;
- private int size;
- private int maxsize;
-
-
- private void initJDBC()
- {
- try
- {
-
- InputStream fin=this.getClass().getResourceAsStream("/db.properties");
- Properties prop=new Properties();
- prop.load(fin);
-
-
- driver=prop.getProperty("driver","sun.jdbc.odbc.JdbcOdbcDriver");
- url=prop.getProperty("url","jdbc:odbc:catalog");
- username=prop.getProperty("username","catalog");
- password=prop.getProperty("password","catalog");
- size=Integer.parseInt(prop.getProperty("size","2"));
- maxsize=Integer.parseInt(prop.getProperty("maxsize","4"));
-
- Class.forName(driver);
- }
- catch(Exception e)
- {
- e.printStackTrace();
- }
- }
-
- private synchronized void initConnectionPool()
- {
- try
- {
- for(int i=0;i {
- Connection con=DriverManager.getConnection(url,username,password);
- con.setAutoCommit(false);
- PooledConnection pcon=new PooledConnection(con);
- pcon.setInuse(false);
-
-
- pool.add(pcon);
- }
- }
- catch(Exception e)
- {
- e.printStackTrace();
- }
- }
-
-
- public synchronized Connection applyConnection()
- {
- Connection con=null;
- for(int i=pool.size()-1;i>=0;i--)
- {
- PooledConnection pcon=(PooledConnection)pool.get(i);
- if(!pcon.isInuse())
- {
- pcon.setInuse(true);
- return pcon.getConnection();
- }
- }
- try
- {
- con=DriverManager.getConnection(url,username,password);
- con.setAutoCommit(false);
-
- PooledConnection pcon=new PooledConnection(con);
- pcon.setInuse(true);
-
- pool.add(pcon);
- }
- catch(Exception e)
- {
- e.printStackTrace();
- }
- return con;
- }
-
-
- public synchronized void releaseConnection(Connection con)
- {
- for(int i=pool.size()-1;i>=0;i--)
- {
- PooledConnection pcon=(PooledConnection)pool.get(i);
- if(pcon.getConnection().equals(con))
- {
- pcon.setInuse(false);
- return;
- }
- }
- }
-
-
-
- public synchronized void closeConnectionPool()
- {
- try
- {
- for(int i=pool.size()-1;i>=0;i--)
- {
- PooledConnection pcon=(PooledConnection)pool.get(i);
- if(pcon.isInuse())
- {
- Thread.sleep(500);
- }
- pcon.close();
- pool.remove(pcon);
- }
- }
- catch(Exception e)
- {
- e.printStackTrace();
- }
- }
-
- public void run()
- {
- while(true)
- {
- try
- {
- synchronized(this)
- {
- while(pool.size()>maxsize)
- {
- PooledConnection pcon=null;
-
- for(int i=pool.size()-1;i>=0;i--)
- {
- PooledConnection pn=(PooledConnection) pool.get(i);
- if(!pn.isInuse())
- {
- pcon=pn;
- }
- if(pcon!=null)
- {
- pool.remove(pcon);
- }
- else
- {
- break;
- }
- }
- }
- }
- Thread.sleep(1000*60);
- }
- catch(Exception e)
- {
- e.printStackTrace();
- }
- }
- }
-
- private static ConnectionPool conPool=new ConnectionPool();
- private ConnectionPool()
- {
- this.initJDBC();
- this.initConnectionPool();
-
- this.start();
- }
-
-
- public static ConnectionPool getInstance()
- {
- return conPool;
- }
- }
-
PooledConnection.java
java 代码
- package database;
-
- import java.sql.*;
-
-
- public class PooledConnection
- {
-
- private Connection con;
-
- private boolean inuse;
-
- public PooledConnection(Connection con)
- {
- this.con=con;
- }
- public Connection getConnection()
- {
- return con;
- }
-
- public void setInuse(boolean inuse)
- {
- this.inuse=inuse;
- }
-
- public boolean isInuse()
- {
- return this.inuse;
- }
-
- public void close()
- {
- try
- {
- if(con!=null)
- {
- con.close();
- }
- con=null;
- }
- catch(Exception e)
- {
- e.printStackTrace();
- }
- }
- }
-
-
- ConnectionPool.java
分享到:
相关推荐
Java JDBC 数据库连接池总结 Java 语言中,JDBC(Java DataBase Connection)是应用程序与数据库沟通的桥梁。在 Web 应用开发的早期,主要使用的技术是 CGIASPPHP 等。之后,Sun 公司推出了基于 Java 语言的 ...
### 数据库连接池的图解原理详解 #### 一、引言 在现代Web应用程序开发中,数据库连接池是一项至关重要的技术。它不仅能够显著提高应用程序的性能,还能有效管理数据库资源,避免资源浪费和系统崩溃的风险。本文将...
在JavaWeb开发中,数据库连接池可以使用JavaBean、Servlet、JSP、XML等技术实现。例如,使用JavaBean可以创建一个数据库连接池,提供给应用程序使用。使用Servlet可以实现数据库连接池的管理和分配。使用JSP可以实现...
【标题】:“基于JDBC的数据库连接池技术研究与应用” 【描述】:本文主要探讨了在Java环境中,如何利用JDBC和数据库连接池技术来优化Web应用程序对数据库的访问,以提高系统性能和资源利用率。 【标签】:JDBC, ...
Java JDBC 数据库连接池是一种优化数据库访问效率的技术,它解决了传统JDBC模式中频繁创建和关闭数据库连接导致的性能问题。随着互联网技术的发展,B/S架构的3层开发模式成为主流,Java的Servlet+JSP+JavaBean技术因...
上述文档描述了一个基本的数据库连接池实现方式,包括配置文件的结构、JavaBean类的使用以及连接池类的设计思路。在实际开发中,可以使用成熟的连接池库,如Apache的DBCP、C3P0或HikariCP,它们提供了更完善的连接...
2. **编写JavaBean类**:创建一个用于封装数据库连接池逻辑的JavaBean类。这个类应该包括连接池的初始化、获取连接、释放连接等方法。此外,还需要实现Statement对象的管理和复用。 3. **JSP页面集成**:在JSP页面中...
### Java JDBC 数据库连接池详解 #### 一、引言 随着互联网技术的快速发展和广泛应用,Web应用程序的需求日益增加,特别是在企业级应用和电子商务领域。传统C/S(客户端/服务器)架构逐步被B/S(浏览器/服务器)...
在本毕业设计中,主题聚焦于“基于JSP的数据库连接池的研究系统设计与实现”。JSP(JavaServer Pages)是一种动态网页技术,它允许开发者将Java代码嵌入到HTML页面中,从而实现服务器端的业务逻辑处理。数据库连接池...
public Pagi()//定义构造器,初始化每页显示的主题数和数据库的连接。 { intPageSize=4; //每页显示的记录数目 db = new DB(); } //Countsql:总记录的Query字符串。[形式为select count(*) from tablename] //...
- 应考虑使用连接池管理数据库连接,避免频繁创建和销毁连接带来的性能开销。 - **异常处理**: - 在生产环境中,应增强异常处理机制,提供更详细的错误信息或日志记录,以便于问题排查。 - **字符编码**: - 注意...
在实际应用中,为了遵循最佳实践,我们应考虑使用连接池,如Apache Commons DBCP或C3P0,以提高性能和管理数据库连接。 在处理数据库操作时,可以创建其他JavaBean方法,例如执行SQL查询、更新、插入和删除等。这些...
### 数据库连接池的核心概念与配置实践 #### 一、数据库连接池的重要性 数据库连接池是一种用于管理数据库连接的技术,其主要目的是为了提高应用程序访问数据库的效率和性能。在实际应用中,每次从应用程序到...
《基于三层架构和JDBC数据库连接池的商品管理系统》是一个典型的Java Web项目,它采用标准的MVC(Model-View-Controller)设计模式,通过三层架构进行业务逻辑的组织,以提高系统的可维护性和可扩展性。在这个系统中...