- 浏览: 307748 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
lzz3717845:
有道理,受教了~谢谢
关于SQL中自动增长列值回复(还原)的问题 -
桃汁天天:
ExtJs中如何动态设置其选中状态!! -
sangumaolv2:
你TM在说什么啊。。。。
关于SQL中自动增长列值回复(还原)的问题 -
duyupeng:
你好,我最近也是在使用这个控件,只是用了_id、_parent ...
ExtJs 中的TreeGrid(Ext.ux.maximgb.tg.EditorGridPanel详解与其他问题解决办法) -
wokao_wg:
大伙可以看看作者说的http://www.sencha.com ...
ExtJs 中的TreeGrid(Ext.ux.maximgb.tg.EditorGridPanel详解与其他问题解决办法)2
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties; import java.util.Vector; public class PersonDefine_ConnectionPool implements Runnable { public String ProductionDB = "axdb_tmp";//給的默認值 private String database_driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";//給的默認值 // private String // dakabase_url="jdbc:sybase:Tds:IP:port/dakabase_test?useUnicode=true&characterEncoding=UTF-8"; private String database_url = "jdbc:sqlserver://localhost:1433;DatabaseName=mgr_live"; //給的默認值 private String username = "sa"; private String password = "12345678"; private int maxConnections = 50; private boolean waitIfBusy = true; private Vector availableConnections, busyConnections; private boolean connectionPending = false; public PersonDefine_ConnectionPool(Properties props) throws SQLException { System.out.println("jdbc:PersonDefine_ConnectionPool..."); int initialConnections = 0; this.ProductionDB = props.getProperty("ELITEDATA.ProductionDB"); this.database_driver = props.getProperty("ELITEDATA.database_driver").trim(); this.database_url = props.getProperty("ELITEDATA.database_url"); this.username=props.getProperty("ELITEDATA.database_username"); this.password=props.getProperty("ELITEDATA.database_password"); this.maxConnections = maxConnections; this.waitIfBusy = waitIfBusy; if (initialConnections > maxConnections) { initialConnections = maxConnections; } availableConnections = new Vector(initialConnections); busyConnections = new Vector(); for (int i = 0; i < initialConnections; i++) { availableConnections.addElement(makeNewConnection()); } } public synchronized Connection getConnection() throws SQLException { System.out.println("jdbc:Get PersonDefine_ConnectionPool..."); if (!availableConnections.isEmpty()) { Connection existingConnection = (Connection) availableConnections.lastElement(); int lastIndex = availableConnections.size() - 1; availableConnections.removeElementAt(lastIndex); // If connection on available list is closed (e.g., // it timed out), then remove it from available list // and repeat the process of obtaining a connection. // Also wake up threads that were waiting for a // connection because maxConnection limit was reached. if (existingConnection.isClosed()) { notifyAll(); // Freed up a spot for anybody waiting return (getConnection()); } else { busyConnections.addElement(existingConnection); return (existingConnection); } } else { // Three possible cases: // 1) You haven't reached maxConnections limit. So // establish one in the background if there isn't // already one pending, then wait for // the next available connection (whether or not // it was the newly established one). // 2) You reached maxConnections limit and waitIfBusy // flag is false. Throw SQLException in such a case. // 3) You reached maxConnections limit and waitIfBusy // flag is true. Then do the same thing as in second // part of step 1: wait for next available connection. if ((totalConnections() < maxConnections) && !connectionPending) { makeBackgroundConnection(); } else if (!waitIfBusy) { throw new SQLException("PersonDefine_ConnectionPool limit reached"); } // Wait for either a new connection to be established // (if you called makeBackgroundConnection) or for // an existing connection to be freed up. try { wait(); } catch (InterruptedException ie) { } // Someone freed up a connection, so try again. return (getConnection()); } } // You can't just make a new connection in the foreground // when none are available, since this can take several // seconds with a slow network connection. Instead, // start a thread that establishes a new connection, // then wait. You get woken up either when the new connection // is established or if someone finishes with an existing // connection. private void makeBackgroundConnection() { connectionPending = true; System.out.println("jdbc:Make Background PersonDefine_ConnectionPool..."); try { Thread connectThread = new Thread(this); connectThread.start(); } catch (OutOfMemoryError oome) { System.out.println("jdbc:PersonDefine_ConnectionPool out of Memory..." + oome); } } public void run() { try { System.out.println("jdbc:run PersonDefine_ConnectionPool..."); Connection connection = makeNewConnection(); synchronized (this) { availableConnections.addElement(connection); connectionPending = false; notifyAll(); } } catch (Exception e) { // SQLException or OutOfMemory System.out.println("jdbc:PersonDefine_ConnectionPool out of Memory..."); } } // This explicitly makes a new connection. Called in // the foreground when initializing the ConnectionPool, // and called in the background when running. private Connection makeNewConnection() throws SQLException { try { System.out.println("jdbc:make new PersonDefine_ConnectionPool..."); // Load database dakabase_driver if not already loaded Class.forName(database_driver); // Establish network connection to database Connection connection = DriverManager.getConnection(database_url, username, password); return (connection); } catch (ClassNotFoundException cnfe) { // Simplify try/catch blocks of people using this by // throwing only one exception type. System.out.println("jdbc:PersonDefine_ConnectionPool Can't find class for database_driver:"); throw new SQLException("Can't find class for PersonDefine_ConnectionPool: " + database_driver); } } public synchronized void free(Connection connection) { System.out.println("jdbc:free PersonDefine_ConnectionPool..."); busyConnections.removeElement(connection); availableConnections.addElement(connection); // Wake up threads that are waiting for a connection notifyAll(); } public synchronized int totalConnections() { return (availableConnections.size() + busyConnections.size()); } /** * Close all the connections. Use with caution: be sure no connections are * in use before calling. Note that you are not <I>required</I> to call * this when done with a ConnectionPool, since connections are guaranteed to * be closed when garbage collected. But this method gives more control * regarding when the connections are closed. */ public synchronized void closeAllConnections() { System.out.println("jdbc:close all PersonDefine_ConnectionPool..."); closeConnections(availableConnections); availableConnections = new Vector(); closeConnections(busyConnections); busyConnections = new Vector(); } private void closeConnections(Vector connections) { try { System.out.println("jdbc:close PersonDefine_ConnectionPool..."); for (int i = 0; i < connections.size(); i++) { Connection connection = (Connection) connections.elementAt(i); if (!connection.isClosed()) { connection.close(); } } } catch (SQLException sqle) { System.out.println("jdbc: PersonDefine_ConnectionPool..." + sqle); } } public synchronized String toString() { String info = "ConnectionPool(PersonDefine_ConnectionPool)(" + database_url + "," + username + ")" + ", available=" + availableConnections.size() + ", busy=" + busyConnections.size() + ", max=" + maxConnections; return (info); } }
发表评论
-
P6Spy应用:Hibernate显示真正SQL(3)
2012-08-03 18:44 1232更改p6spy.jar中的以下文件即可控制FileLogger ... -
P6Spy应用:Hibernate显示真正SQL(2)
2012-08-03 18:14 1433下表列出了 spy.properties 配置文件 ... -
P6Spy应用:Hibernate显示真正SQL(1)
2012-08-03 18:05 1626P6 ... -
ResultSet用法集锦
2012-02-23 16:56 139725ResultSet用法集锦 结 ... -
ResultSet 参数設置使用實例
2012-02-23 14:32 1150public static String[][] ... -
可供参考的【数据库连接池(DBCP)】
2012-02-10 10:10 1014package com.spring.test; ... -
类型检查(RTTI与反射机制)转载
2012-02-02 10:35 1136... -
Servlet 3.0 新特性概览
2012-01-30 15:14 1002Se ... -
如何在web.xml文件中引入其他的xml文件(web.xml如何拆分)
2011-11-14 20:08 8082如何在web.xm ... -
URL的Encoder、Decoder
2011-09-14 17:47 945URL : java.net.URLEncoder.e ... -
java中的DateAdd
2011-04-18 21:58 2338/** * 追溯到 startDate ... -
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE
2011-04-18 21:52 2336Statement stmt = con.createSt ... -
都是空格惹得祸
2010-10-28 11:06 1152在一个属性文件中获取相关信息时:如 database.p ... -
SVN提交工作时需要注意的事项
2010-10-14 20:31 934一.提交之前先更新 1. ...
相关推荐
总的来说,数据库连接池是Java开发中不可或缺的一部分,它通过有效地管理和复用数据库连接,提高了系统的运行效率和资源利用率。了解和掌握C3P0和DBCP的使用方法,能够帮助开发者更好地优化数据库操作,提升应用性能...
在给定的标题和描述中,我们聚焦于两个关键的库——`commons-dbcp.jar`和`commons-pool.jar`,它们是Apache Commons项目的一部分,用于实现数据库连接池功能。 `commons-dbcp`(Database Connection Pool)是Apache...
总结来说,数据库连接池是现代数据库驱动的Web应用程序中不可或缺的一部分,它通过有效的管理数据库连接,提高了系统的效率和稳定性,同时也降低了资源消耗和潜在的系统风险。开发者可以根据项目需求选择合适的连接...
标题中提到的"各种数据库连接池",包括了c3p、DBCP和Proxool,这些都是Java环境下常见的数据库连接池实现: 1. **C3P0**:这是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。...
接下来,我们将以Java为例,简要介绍如何使用开源库如C3P0、HikariCP或Apache DBCP来实现数据库连接池。 1. **C3P0** 是一个开源的JDBC连接池,提供了数据库连接的自动获取、释放和管理功能。在使用C3P0时,我们...
2. DBCP (Apache BasicDataSource):Apache Commons的一个子项目,它是基于Jakarta Pool实现的数据库连接池。 3. HikariCP:一款高性能的Java JDBC连接池,以其极低的空闲连接内存占用和快速的连接创建速度而闻名。 ...
数据库连接池是现代Java应用程序中不可或缺的部分,它有效地管理和优化了数据库资源的使用。在Java中,连接池通过复用已存在的数据库连接来减少创建和销毁连接的开销,从而提高系统性能。本文将深入探讨数据库连接池...
在Java开发领域,数据库连接池(Database Connection Pool,简称DBCP)是一种提高数据库访问性能、降低资源消耗的重要技术。它通过预先建立一定数量的数据库连接,存储在一个“池”中,当应用程序需要进行数据库操作...
- DBCP (Apache BasicDataSource):Apache的一个开源项目,基于Jakarta Pool实现,它是Tomcat默认的数据库连接池。 - HikariCP:高性能的连接池,设计目标是提供最小的延迟和最大吞吐量,被认为是目前最快的Java...
此外,随着技术的发展,还有其他更先进的数据库连接池组件可供选择,如HikariCP,它以其高性能和低延迟而受到广泛欢迎。 总结来说,Tomcat数据库连接池的使用涉及添加依赖、配置数据源、上下文配置以及代码中的使用...
DBCP(Database Connection Pool)是Apache组织提供的一种开源数据库连接池实现,全称为"Jakarta DBCP"。它基于Java编写,旨在提高数据库访问效率,通过复用已存在的数据库连接,减少创建和销毁数据库连接时的开销,...
数据库连接池是现代Web应用程序中不可或缺的部分,它有效地管理和复用数据库连接,提高了系统的性能和资源利用率。在Java中,我们可以使用多种库来创建数据库连接池,如C3P0、DBCP、HikariCP等。本示例将重点讨论...
总的来说,Apache Commons DBCP是Java开发中实现数据库连接池的一个可靠选择,尤其适合于对性能要求不那么高但又希望利用连接池技术来提升效率的应用场景。然而,对于高并发和性能敏感的应用,可能需要考虑更先进的...
数据库连接池可以通过多种方式进行实现,包括但不限于手动构建连接池或使用现有的开源框架(如C3P0、DBCP等)。无论采用哪种方式,其核心都是为了达到以下目标: - 预先创建一定数量的数据库连接。 - 当应用程序...
在Java编程语言中,常见的数据库连接池实现有Apache的DBCP、C3P0,以及HikariCP等。这些连接池都提供了丰富的配置选项,如最小连接数、最大连接数、超时时间等,以便根据实际应用的负载情况进行调整。 DBConnection...
数据库连接池是现代应用程序开发中不可或缺的一个组件,它在提高系统性能、节省资源以及优化数据库操作方面发挥着关键作用。数据库连接池的工作原理涉及到多个层面,包括连接的创建与复用、连接池的管理以及性能优化...
数据库连接池是现代Java应用程序中不可或缺的组件,它在提高数据库访问效率、节省系统资源方面起着关键作用。本文将通过一个Demo小例子详细介绍四种常见的数据库连接池实现方式:C3P0、DBCP、HikariCP以及Druid。 ...
在这个压缩包“开源数据库连接池”中,我们找到了几个主流的Java数据库连接池实现,包括c3p0、DBCP等,以及与JDBC事务控制相关的PPT资料。以下将详细介绍这些内容。 首先,c3p0是一个开源的JDBC连接池,由Miquel ...
本话题将聚焦于"数据库连接池所需要用到的三个jar包"——`commons-collections-3.1.jar`、`commons-dbcp-1.2.2.jar`和`commons-pool.jar`,它们在数据库连接池实现中的作用以及如何使用。 首先,`commons-...
在Java开发中,常见的数据库连接池实现有Apache的DBCP、C3P0,以及HikariCP等。这些连接池库提供了一套完善的API和配置选项,使得开发者能够根据实际需求调整连接池的大小、超时时间、空闲检查频率等参数。 1. DBCP...