http://www.iteye.com/topic/198175
一个最简单地数据库连接池实现:
注意:利用getConnection()方法得到的Connection,程序员很习惯地调用conn.close()方法关闭了数据库连接,那么上述的数据库连接机制便形同虚设。 在调用conn.close()方法方法时如何调用releaseConnection()方法?这是关键。这里,我们使用Proxy模式和java反射机制。
一个最简单地数据库连接池实现:
public class ConnectionPool { private static Vector pools; private final int POOL_MAXSIZE = 25; /** * 获取数据库连接 * 如果当前池中有可用连接,则将池中最后一个返回;若没有,则创建一个新的返回 */ public synchronized Connection getConnection() { Connection conn = null; if (pools == null) { pools = new Vector(); } if (pools.isEmpty()) { conn = createConnection(); } else { int last_idx = pools.size() - 1; conn = (Connection) pools.get(last_idx); pools.remove(last_idx); } return conn; } /** * 将使用完毕的数据库连接放回池中 * 若池中连接已经超过阈值,则关闭该连接;否则放回池中下次再使用 */ public synchronized void releaseConnection(Connection conn) { if (pools.size() >= POOL_MAXSIZE) try { conn.close(); } catch (SQLException e) { // TODO自动生成 catch 块 e.printStackTrace(); } else pools.add(conn); } public static Connection createConnection() { Connection conn = null; try { Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); String url = "jdbc:oracle:thin:@localhost:1521:orcl"; String user = "scott"; String password = "tiger"; conn = DriverManager.getConnection(url, user, password); } catch (InstantiationException e) { // TODO自动生成 catch 块 e.printStackTrace(); } catch (IllegalAccessException e) { // TODO自动生成 catch 块 e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO自动生成 catch 块 e.printStackTrace(); } catch (SQLException e) { // TODO自动生成 catch 块 e.printStackTrace(); } return conn; } }
注意:利用getConnection()方法得到的Connection,程序员很习惯地调用conn.close()方法关闭了数据库连接,那么上述的数据库连接机制便形同虚设。 在调用conn.close()方法方法时如何调用releaseConnection()方法?这是关键。这里,我们使用Proxy模式和java反射机制。
public synchronized Connection getConnection() { Connection conn = null; if (pools == null) { pools = new Vector(); } if (pools.isEmpty()) { conn = createConnection(); } else { int last_idx = pools.size() - 1; conn = (Connection) pools.get(last_idx); pools.remove(last_idx); } ConnectionHandler handler=new ConnectionHandler(this); return handler.bind(con); } public class ConnectionHandler implements InvocationHandler { private Connection conn; private ConnectionPool pool; public ConnectionHandler(ConnectionPool pool){ this.pool=pool; } /** * 将动态代理绑定到指定Connection * @param conn * @return */ public Connection bind(Connection conn){ this.conn=conn; Connection proxyConn=(Connection)Proxy.newProxyInstance( conn.getClass().getClassLoader(), conn.getClass().getInterfaces(),this); return proxyConn; } /* (非 Javadoc) * @see java.lang.reflect.InvocationHandler#invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[]) */ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // TODO自动生成方法存根 Object obj=null; if("close".equals(method.getName())){ this.pool.releaseConnection(this.conn); } else{ obj=method.invoke(this.conn, args); } return obj; } }
发表评论
-
Consistent Hashing
2010-02-09 17:12 799import java.util.Collection; ... -
防止JAVA程序重复启动的一个另类解决办法
2009-03-31 20:29 1930http://www.iteye.com/topic/3773 ... -
简单LRU算法实现缓存
2009-03-27 11:31 1558http://www.blogjava.net/killme2 ... -
MappedByteBuffer内存映射
2009-03-15 21:26 2144通过把一个套接字通道(SocketChannel)注册到一个选 ... -
如何知道方法的调用者
2009-03-11 20:35 801http://www.iteye.com/topic/1317 ... -
java调用Oracle EXP备忘
2009-03-10 11:28 1547http://www.blogjava.net/BlueDav ... -
关于java中volatile字段的ordering
2009-03-08 22:00 755多个volatile操作之间是有序的,compiler和处理 ... -
Initialize-on-demand Holder Class
2009-03-02 15:01 905public class Singleton { ... -
Interceptor的实现
2009-03-01 21:26 800public interface Action { p ... -
Quartz CronTrigger最完整配置说明
2009-02-15 15:12 996CronTrigger配置格式: 格 ... -
ClassLoader介绍
2009-01-21 13:24 803JVM在运行时会产生三个ClassLoader,Bootstr ... -
消息的发送与回调
2009-01-06 22:03 810/** * 回调接口 * @author ... -
自己编写IOC
2009-01-05 21:59 1176<?xml version="1.0&qu ... -
四则运算的中缀转后缀
2008-12-11 11:41 1616import java.math.BigDecimal ... -
一个简单的多线程、断点下载Java程序
2008-12-10 20:49 1894//这个是任务Bean public cl ... -
生产者-消费者
2008-12-02 14:05 818package debug; import java.u ...
相关推荐
### Java操作数据库方式与设计模式应用 #### 一、Java操作数据库基础:JDBC **JDBC(Java Database Connectivity)**是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写...
设计模式在Java数据库操作组件中的应用 设计模式是软件开发中一种非常重要的概念,它可以帮助开发人员更好地设计和实现软件系统。在Java数据库操作组件中,设计模式的应用可以提高开发效率、简化代码、提高系统的可...
标题“JAVA数据库MVC设计模式”提到了两个主要概念:Java编程语言和MVC(Model-View-Controller)设计模式。在Java中,MVC是一种广泛用于构建用户界面的架构模式,它将应用程序的逻辑分为三个相互协作的部分:模型、...
《Java数据库应用程序编程指南》是一本深入探讨如何在Java环境中进行数据库编程的著作。随书源码包含了书中讲解的关键示例代码,以及用于创建数据库的SQL脚本,这对于读者理解和实践书中理论至关重要。通过这些资源...
Java DAO(Data Access Object)设计模式是一种常用的软件设计模式,用于在Java应用程序中与数据库进行交互。DAO模式的主要目的是为了实现数据访问层的隔离,它将业务逻辑与数据存储细节分离开来,使得代码更加模块...
在Java数据库编程中,我们常常会使用到一些设计模式来优化代码结构和提高程序的可维护性。例如,模板方法模式(Template Method)和单例模式(Singleton)。模板方法模式允许我们将固定的算法步骤定义在一个方法中,...
数据库应用框架在Java开发中扮演着核心角色,为软件开发提供便利,大大降低开发人员在数据库设计中的工作量。本文主要分析了Java与数据库应用框架之间的联系,设计了基于Java的数据库应用框架模型,并通过实例分析了...
在进行数据库操作时,需要注意的一些关键点包括:事务管理、性能优化(如批处理、缓存使用)、错误处理和异常捕获、以及数据库设计的规范化和索引优化。 总的来说,Java开发操作数据库的架包为开发者提供了强大的...
在Java中集成Oracle数据库,不仅可以从Java调用数据库操作,还可以在SQL和PL/SQL中调用Java代码。Oracle提供了扩展的DDL语句,允许在数据库中创建和管理Java程序,将Java命名空间映射到数据库模式,使得访问和调用...
在本篇博客笔记中,我们将探讨如何利用Java进行数据库连接,并将模板方法模式应用于数据库操作,以实现更高效和可维护的代码。 首先,要进行数据库连接,我们需要引入JDBC驱动。对于不同类型的数据库(如MySQL、...
在本实例中,javabean可能被用来封装数据库记录,作为对象在JSP和servlet之间传递,从而实现了模型-视图-控制器(MVC)的设计模式,提高了代码的可维护性和可复用性。 文件"ch02"可能代表教程或案例的第二章,这...
DAO模式是一种设计模式,用于封装对数据库的操作,将业务逻辑与数据访问细节分离开来。在Java中,我们可以创建一个DAO接口,定义各种操作方法,然后实现该接口以完成实际的数据库交互。这样,即使数据库结构发生变化...
本项目着重讲解如何使用Java进行数据库操作,涉及SQL语言的基础应用以及Java的DAO(Data Access Object)设计模式。我们将探讨以下几个方面: 1. **数据库建表**: 在开始编程之前,我们需要先创建数据库表。SQL...
这个"JAVA数据库操作的小项目"是一个很好的学习平台,涵盖了JAVA编程、数据库操作和设计模式等多个方面,对于初学者来说,可以通过该项目深入理解JAVA与数据库的交互以及数据库管理的基本原理。
在IT行业中,数据库操作是应用程序开发中的核心环节,尤其是在企业级应用中。"JAVA操作数据库三层"是指使用Java语言设计的一种常见的软件架构模式,即MVC(Model-View-Controller)模型,通常用于构建数据库驱动的...
总的来说,这个“java数据库课程设计”项目提供了一个实践平台,让学生或开发者能够学习到如何用Java进行Web开发,如何设计和操作数据库,以及如何构建一个完整的在线考试系统。它涵盖了从需求分析、数据库设计、...
在IT行业中,数据库同步是一个关键话题,特别是在分布式系统和企业级应用中,多个数据库的同步是确保数据一致性、完整性和高可用性的重要手段。本文将深入探讨如何使用Java来实现多个数据库之间的数据同步。 首先,...
Java数据库操作通用类是软件开发中一个非常实用的设计模式,它允许开发者编写一次代码,就能在不同的数据库系统上执行SQL操作。这样的设计提高了代码的可重用性和维护性,降低了因更换数据库系统而带来的修改成本。...
设计模式在Java数据库编程中的运用