`
anysky131
  • 浏览: 176597 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

使用策略模式封装数据库连接

阅读更多
策略模式的目的是定义一定的算法结构,然后让其子类去按照自己的需要结合给定的算法骨架去实现特定的算法。对于本模式的算法,可以独立于客户存在,对于算法可以与客户端完成没有任何的联系!
本例封装了数据库连接,使数据库连接被完全封装了!
1、策略模式中的抽象算法接口
package com.hejianjiao.database;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

public interface JdbcStrategy {

	/**
	 * 策略抽象接口,定义了jdbc的一般通用算法
	 */

	Connection init();

	void release(Statement statement, Connection conn);

	void save(String sql);

	ResultSet get(String sql);

}



2、将数据信息放在一个类中
package com.hejianjiao.database;

public class DatabaseInfo {

	protected final String url = "jdbc:mysql://localhost:3306/test";
	protected final String username = "root";
	protected final String password = "";
	protected final String driverClass = "org.gjt.mm.mysql.Driver";

}



3、对于算法的一种实现,封装数据库连接与操作
package com.hejianjiao.database;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JdbcStrategyTemplate extends DatabaseInfo implements JdbcStrategy {

	/**
	 * 对于策略的一个算法实现,它可以对算法进行自己的操作,在完成算法规定的基础上,可以处理自己的方法
	 */

	public Connection init() {
		registerDriver();
		return getConnection();
	}

	public void release(Statement statement, Connection conn) {
		closeStatement(statement);
		closeConnection(conn);
	}

	/**
	 * 操作数据
	 */
	public void save(String sql) {
		PreparedStatement pstmt = null;
		Connection conn = null;

		try {
			init();
			pstmt = conn.prepareStatement(sql);
			pstmt.executeUpdate();
		} catch (SQLException e) {
			System.out.println("数据操作失败!");
			e.printStackTrace();
		} finally {
			release(pstmt, conn);
		}
	}

	/**
	 * 获取数据
	 */
	public ResultSet get(String sql) {
		PreparedStatement pstmt = null;
		Connection conn = null;
		ResultSet rs = null;

		try {
			init();
			pstmt = conn.prepareStatement(sql);
			rs = pstmt.executeQuery();

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			release(pstmt, conn);
		}
		return rs;
	}

	/**
	 * 注册JDBC驱动
	 */
	public void registerDriver() {
		try {
			Class.forName(driverClass);
		} catch (ClassNotFoundException e) {
			System.out.println("注册驱动失败!");
			e.printStackTrace();
		}
	}

	/**
	 * 取得连接
	 */
	public Connection getConnection() {
		try {
			return DriverManager.getConnection(url, username, password);
		} catch (SQLException e) {
			System.out.println("数据库连接失败!");
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 关闭连接
	 */
	public void closeConnection(Connection conn) {
		if (conn != null)
			try {
				conn.close();
			} catch (SQLException e) {
				System.out.println("数据库关闭失败!");
				e.printStackTrace();
			}
	}

	/**
	 * 关闭语句
	 */
	public void closeStatement(Statement statement) {
		if (statement != null)
			try {
				statement.close();
			} catch (SQLException e) {
				System.out.println("语句关闭失败!");
				e.printStackTrace();
			}
	}

}



策略模式减小了通用算法和具体控制细节的耦合,它比模板模式要复杂一些,但使用接口的形式,使得它的灵活度更高了。在需要完全替换算法的情况下,更加适用。因为它可以在不改变客户代码的基础上,对底层再一次进行封装。而它的一个缺点是客户端需要知道提供的策略有哪几种。
分享到:
评论

相关推荐

    一个连接多种数据库的连接池封装包

    通常,这会通过使用抽象接口或者策略模式来实现,以确保对不同数据库的API调用可以被统一处理。例如,可能有一个`DatabaseConnection`接口,而针对每种数据库会有相应的实现类,如`MySqlConnection`, `...

    利用享元模式封装数据库CRUD

    总结起来,利用享元模式封装数据库CRUD是一种高效的设计策略,它能够减少数据库操作的对象创建,提高系统的运行效率。通过共享DAO对象,我们不仅可以优化内存使用,还可以统一管理数据库连接,降低系统复杂度,同时...

    由数据库连接所联想到的5种设计模式

    在数据库连接管理中,策略模式可以用来处理不同的连接策略,如连接池的配置策略(最大连接数、最小连接数、超时时间等)。这样可以根据不同场景动态选择合适的策略,提高系统的灵活性。 5. 装饰器模式(Decorator)...

    C#数据库访问通用实现封装

    - 连接管理:创建、打开、关闭数据库连接,确保资源的有效利用。 - 事务处理:支持开始、提交和回滚事务,保证数据的一致性。 - 参数化查询:防止SQL注入攻击,提高代码的可读性和安全性。 - 错误处理:捕获并处理...

    Delphi数据库三层连接池

    总的来说,"Delphi数据库三层连接池"是一个高效且实用的数据库访问方案,通过封装数据库连接管理和三层架构的设计,提高了系统性能,降低了资源消耗。对于使用Delphi进行数据库开发的工程师来说,理解和掌握这样的...

    实用数据库访问类,封装常见的数据库访问类助手

    5. **异常处理**:捕获并封装数据库操作中可能出现的异常,提供统一的错误处理机制。 "SmartDBUtility-master"可能是一个开源项目,包含了主分支的源代码。开发者可以通过查阅源码了解其具体实现,学习如何设计和...

    c#.net 抽象数据库连接类(适合所有数据库)

    在C#.NET编程中,创建一个抽象的数据库连接类是一个重要的设计模式,它允许开发者编写通用的代码来处理各种不同的数据库系统,如SQL Server、MySQL、Oracle等。这个设计模式通常被称为“数据提供者”(DataProvider...

    关于OSGI分布式开发简单连接数据库

    4. **使用Delegation模式**:为了封装数据库连接的复杂性,可以创建一个专门负责数据库操作的Delegate类。这个Delegate类可以在内部管理连接池,提供连接和关闭连接的方法。其他bundle只需要与Delegate交互,而无需...

    数据库连接池jar包(含说明)

    对数据库连接池的封装 可以修改连接方式 包含排队等待功能 采用工厂模式、策略莫斯和反射等技术

    工厂模式和策略模式

    在实际项目中,例如数据库连接的创建,我们可以使用工厂模式来创建不同类型的连接对象,如MySQL连接、Oracle连接等,而无需关心具体的实现细节。 其次,策略模式是一种行为设计模式,它使你能在运行时改变对象的...

    用配置文件和工厂模式访问多种数据库

    工厂模式的好处在于,它封装了创建对象的复杂性,使得客户端代码只需关注于如何使用数据库连接,而无需关心具体的创建过程。这样,如果需要更换数据库,只需要更改配置文件,而无需改动大量业务代码。 具体到...

    Access数据库的简单封装

    同时,为了提高代码的可读性和复用性,可能会采用面向对象的设计模式,如工厂模式用于创建数据库连接,策略模式用于执行不同的SQL操作等。 总之,Access数据库的简单封装主要是为了简化数据库操作,提高代码的可...

    三层+抽象工厂(连接Msql数据库和SqlServer2005数据库)

    总结一下,三层架构和抽象工厂模式结合,能够帮助我们构建一个高效、可扩展的数据库连接系统。通过将数据库连接的创建抽象化,我们可以在不改变核心业务逻辑的情况下,轻松地在MySQL和SQL Server之间切换。同时,三...

    数据库封装demo

    因此,通常我们会使用数据库连接池(如HikariCP、C3P0、Druid等)来管理数据库连接,它能提供预创建的数据库连接,避免频繁创建和关闭连接,提高系统性能。 2. **DAO(Data Access Object)模式**:数据库封装的...

    简单工厂模式、代理模式、策略模式如此相似

    策略模式定义了一系列的算法,并将每一个算法封装起来,使它们可以相互替换,让算法独立于使用它的客户。例如,电商网站的优惠策略,可以根据不同的促销活动选择不同的计算折扣的策略。 这三种模式虽然在某些方面有...

    java数据库连接和操作包

    这些类的设计和实现,通常会遵循设计模式,比如工厂模式用于创建数据库连接,单例模式确保连接池的唯一性,策略模式用于灵活选择SQL执行策略等。 总之,"java数据库连接和操作包"是为了简化Java程序中的数据库操作...

    DAO_TEST.rar_delphi dao_数据库连接池

    DAO是面向对象编程中用于封装数据库操作的一种设计模式,它使得应用程序可以与数据库进行交互而无需直接操作数据库API,从而提高代码的可维护性和可复用性。 描述中提到“用DELPH写的DAO访问模块”,暗示了这是使用...

    VB SQL SERVER 2000 数据库 连接 实例 源码 下载

    - **备份和恢复**:提供多种备份类型和恢复模式,以适应不同的业务需求和故障恢复策略。 - **索引和查询优化**:支持多种索引类型,如B树索引、全文索引等,以及查询优化器来提升查询性能。 4. **学习资源**: -...

    JAVA数据库工具类

    总的来说,这个数据库工具类利用DBCP连接池管理数据库连接,采用懒汉单例模式确保在需要时才创建连接,并通过线程绑定策略提高多线程环境下的安全性与效率。开发者可以通过配置`jdbc.properties`文件调整数据库连接...

    Android数据库框架GreenDao封装使用,易理解、易扩展

    本资源提供了一份关于如何封装和使用GreenDao的教程,特别适合初学者以及希望提升数据库操作效率的开发者。 GreenDao的核心概念是实体类,这些类直接映射到数据库表。通过简单的注解,你可以定义实体属性,如字段...

Global site tag (gtag.js) - Google Analytics