- 浏览: 716812 次
- 来自: ...
-
文章分类
最新评论
-
ranguisheng:
可以加点注释,代码不便于阅读.
用java实现数据库连接池的一个简单示例 -
abcd880129:
这样写的话,还要用专门的下载工具,不然,只能下到一个为空的ex ...
ZK下载文件时,不在服务器生成文件直接下载 -
234369425:
同上,是20
java计算阶乘 -
CodeToMyLaw:
如果目录中含有中文呢?
[^\x00-\xff] 中文的 ...
js验证文件目录格式的正确性 -
yanzhoupuzhang:
加了,还是报那个错误!
org.apache.commons.dbcp.BasicDataSource的解决方法
转载:http://hi.baidu.com/triceratops/blog
import java.util.Stack; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import org.apache.log4j.*; public final class DBConnectionPool { private static DBConnectionPool dbConnectionPool = null; private static int accumulator = 0; private static Logger log = Logger.getLogger(DBConnectionPool.class); private static final int POOL_INIT_SIZE = 128; private static final int POOL_MAX_SIZE = 512; private Stack pool; private String driverName = "com.ibm.db2.jcc.DB2Driver"; private String url = "jdbc:db2://192.168.1.100:60000/flamingo"; private String user = "daniel"; private String password = "850306"; public static DBConnectionPool getInstance() throws Exception{ if(dbConnectionPool == null){ synchronized(DBConnectionPool.class){ if(dbConnectionPool == null) dbConnectionPool = new DBConnectionPool(); } } return dbConnectionPool; } private DBConnectionPool() throws ClassNotFoundException, SQLException{ log.setLevel(Level.DEBUG); pool = new Stack(); initializePool(); } private void initializePool() throws ClassNotFoundException, SQLException{ log.info("Database connection pool initializing..."); Connection conn = null; try{ Class.forName(driverName); for(int i = 0;i < POOL_INIT_SIZE;i++){ conn = new DBConnection(DriverManager.getConnection (url,user,password),this).getConnection(); pool.push(conn); accumulator++; } } catch(ClassNotFoundException e){ log.error("Failure: Cannot find the db2 driver!"); throw e; } catch(SQLException e){ log.error("Failure: Cannot connect to the database!"); throw e; } log.info("Database connection pool initialized successfully!"); log.info("pool size is: "+pool.size()); } public synchronized Connection getConnection() throws ClassNotFoundException, SQLException{ Connection conn; while(true){ if(!pool.isEmpty()){ conn = (Connection)pool.pop(); if(conn == null || conn.isClosed()){ accumulator--; continue; } return conn; } else{ if(accumulator == POOL_MAX_SIZE){ try{ wait(5000); } catch(InterruptedException e){ e.printStackTrace(); } } else{ //create a new database connection try{ Class.forName(driverName); conn = new DBConnection(DriverManager.getConnection (url,"db2inst2","db2inst2"),this).getConnection(); accumulator++; return conn; } catch(ClassNotFoundException e){ log.error("Failure: Cannot find the db2 driver!"); throw e; } catch(SQLException e){ log.error("Failure: Cannot connect to the database!"); throw e; } } } } } public synchronized boolean returnConnection(Connection conn){ if(pool.size() < POOL_MAX_SIZE){ pool.push(conn); log.info(conn +" has been returned!"); notify(); return true; } return false; // The connection pool is full filled. } public static void main(String[] args) throws Exception{ Connection conn = getInstance().getConnection(); System.out.println(conn); conn.close(); } } =============================================================================== import java.sql.Connection; import java.sql.SQLException; import java.lang.reflect.Proxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import org.apache.log4j.Logger; import org.apache.log4j.Level; public class DBConnection implements InvocationHandler{ private Connection conn; private DBConnectionPool dbConnectionPool; private static Logger log = Logger.getLogger(DBConnectionPool.class); DBConnection(Connection conn,DBConnectionPool dbConnectionPool){ this.conn = conn; this.dbConnectionPool = dbConnectionPool; log.setLevel(Level.DEBUG); } //return the proxy of an inner hold connection Connection getConnection(){ return (Connection)Proxy.newProxyInstance( conn.getClass().getClassLoader(),new Class[]{Connection.class},this); } public Object invoke(Object proxy,Method method, Object[] args) throws SQLException, IllegalAccessException,InvocationTargetException{ Object result = null; try{ log.debug("Method: "+method.getName()+" starts......"); if(method.getName().equals("close")){ close(); } else{ result = method.invoke(conn,args); } log.debug("Method: "+method.getName()+" ends......"); } catch(SQLException e){ log.error("Database operation failed, please try later..."); throw e; } catch(IllegalAccessException e){ log.error(method.getName()+" operation forbidden!"); throw e; } catch(InvocationTargetException e){ log.error(method.getName()+" operation forbidden!"); throw e; } return result; } private void close() throws SQLException{ if(!dbConnectionPool.returnConnection(getConnection())){ conn.close(); log.info(conn + " is closed!"); conn = null; } } }
发表评论
-
Json,Gson,FastJson解析笔记
2015-06-13 17:31 947Json 1.将JavaBean转换成Json对象: pu ... -
String与InputStream互转的几种方法
2015-06-13 17:24 790/** * 利用BufferedReader ... -
Java压缩图片
2015-06-06 15:49 1131package com.yipai.ut ... -
HashMap的工作原理
2013-11-18 22:58 887本文由 ImportNew - 唐小娟 翻译自 Javarev ... -
一道多线程题目的解决方案
2013-08-03 17:24 843在iteye上看到的一道多线程的题目,参考了一下网友的实现,那 ... -
java socket 多线程网络传输多个文件
2013-06-25 14:57 894由于需要研究了下用 java socket 传输文件,由于需要 ... -
处理大数字
2011-04-30 13:40 1025/** * 处理大数字 * & ... -
生成随机数
2011-04-30 13:39 1249/** * 生成随机数 */ public cl ... -
转换数字的进制
2011-04-30 13:38 1340/** * * 转换数字的进制 */ pu ... -
数字的舍入
2011-04-30 13:37 1115/** * 数字的舍入 * */ publi ... -
格式化数字
2011-04-30 13:36 1177/** * 格式化数字的输出 * */ pu ... -
数字与其封装类之间的转换
2011-04-30 13:16 857/** * * 数字与其封装类之间的转换 * ... -
Adapter适配器模式
2011-04-24 21:38 891/** * Adapter适配器模式<br> ... -
Factory工厂模式
2011-04-24 21:36 925/** * 模式名称:工厂模式 * 模式特征:通过 ... -
Singleton单例模式
2011-04-24 21:35 1015public class SingletonA { ... -
排序类
2011-04-24 20:38 1022/** * 定义数字排序的 ... -
方法和变量在继承时的覆盖与隐藏
2011-04-24 20:30 990public class Parent2 { // ... -
类的加载顺序
2011-04-24 20:27 873/** * 父类 * */ public ... -
自定义形状类(继承的运用)
2011-04-10 17:18 1152/** * * 自定义图形的基类 */ p ... -
myeclipse8.6 注册码
2011-04-10 14:17 1194package com.springemail; i ...
相关推荐
总结来说,本资源提供了学习和实践Java数据库连接池的一个起点。通过分析源码并运行示例,你可以深入理解数据库连接池的实现细节,这将对提升Java应用的数据库性能有很大帮助。同时,这也是一次了解和比较不同连接池...
### JAVA 使用数据库连接池连接Oracle数据库全代码解析 #### 一、概述 本文将详细介绍如何在Java项目中使用Apache DBCP(Database Connection Pool)来连接Oracle数据库,并提供完整的示例代码。通过这种方式,我们...
本文将深入探讨Java数据库连接池的原理、使用以及示例。 首先,理解数据库连接池的工作机制至关重要。数据库连接池在初始化时会创建一定数量的数据库连接,这些连接存储在内存中,形成一个“池”。应用程序在需要时...
在Java中,实现数据库连接池通常涉及创建一个能够管理数据库连接的池类。这个池类需要维护一个空闲连接的集合,提供获取和释放连接的方法,并且可能...压缩包文档记录的是一个使用HikariCP实现数据库连接池的简单示例。
以下是一个简单的示例,展示如何使用动态代理实现数据库连接池: 1. 定义数据库连接池参数类(如`DBPoolConfig`),存储JDBC驱动类名、URL、用户名和密码等信息,用于初始化连接池。 ```java public class ...
### 标题解析:“一个效果非常不错的JAVA数据库连接池” 此标题明确指出这是一个Java实现的数据库连接池,并且其效果良好。这意味着该连接池不仅能够有效管理数据库连接,还能确保高性能和稳定性。对于那些希望深入...
Java数据库连接池是一种管理数据库连接的技术,用于高效地管理和复用数据库连接,从而提高应用程序的性能和资源利用率。连接池的基本思想是在应用启动时预先创建一定数量的数据库连接,存储在一个池中,当应用程序...
本项目提供了一个轻量级的Java数据库连接池实现,旨在简化开发过程,提高应用性能并降低资源消耗。下面将详细介绍这个轻量级Java数据库连接池的设计理念、工作原理以及如何使用。 1. **设计理念** 轻量级数据库...
数据库连接池是一种管理数据库连接的技术,它预先初始化一定数量的数据库连接并保存在内存中,当应用程序需要连接数据库时,可以从连接池中获取一个已存在的连接,用完后再归还,而不是每次都新建和关闭连接。...
下面是一个简化的示例,展示了如何实现一个基础的连接池`ConnectionPool`: ```java public class ConnectionPool implements TimerListener { private int m_ConnectionPoolSize; private int m_...
本示例是关于如何使用C3P0连接池来连接Oracle数据库的一个简单实例。C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。 首先,我们需要理解什么是数据库连接池。数据库连接...
1. **连接池框架的选择**:目前主流的Java数据库连接池框架有Apache Commons DBCP、C3P0、Druid等。不同的框架有不同的特点,选择合适的框架可以更好地满足项目需求。 2. **配置参数设置**:合理设置连接池的相关...
文章中的示例代码提供了一个简单的数据库连接池实现——`ConnectionPool`类。这个类包含了一些关键属性和方法,下面我们来逐一介绍: 1. **属性定义**: - `private String jdbcDriver=""`:存储数据库驱动名称。 ...
本示例将探讨如何通过自定义Java类来实现一个简单的数据库连接池。 首先,我们需要引入JDBC(Java Database Connectivity)API,这是Java与各种数据库交互的标准接口。在Java中,我们通常使用`java.sql.Connection`...
数据库连接池是现代Java应用程序中不可或缺的部分,它有效地管理和复用数据库连接,提高了系统的性能和效率。本项目基于Java实现了这样一个连接池,旨在帮助开发者理解其工作原理,并能在实际项目中灵活运用。 在...
Java 实现数据库连接池主要涉及两个关键点:减少使用者与连接池之间的耦合度和接管 `Connection.close()` 方法。为了实现这两个目标,我们可以利用 Java 的动态代理机制。 首先,了解数据库连接池的作用。连接池是...
数据库连接池是一种用于提高数据库访问效率的技术,其基本思想是在程序启动时预创建一定数量的数据库连接,并将其存储在一个“缓冲池”中。当应用程序需要访问数据库时,可以直接从连接池中获取已存在的连接,使用...
Java数据库连接池C3P0是一种常用的开源数据库连接管理工具,它通过提供连接池服务,提高了应用程序处理数据库连接的效率,降低了系统资源的消耗。在Java应用中,尤其是在服务器端,数据库连接的创建和关闭是相对耗时...
### Java中数据库连接池原理机制的详细讲解 #### 一、引言 在现代软件开发中,特别是基于Java的企业级应用开发中,数据库连接管理是一个关键环节。由于数据库连接是昂贵的资源,频繁地创建与关闭连接将严重影响系统...
数据库连接池是现代Web应用程序中不可或缺的一个组件,它在提高数据库访问效率和资源管理方面扮演着重要角色。本文将深入探讨数据库连接池的原理、作用,以及如何在Java Web环境中,特别是结合Tomcat服务器和JSP进行...