`
nmj1987
  • 浏览: 30310 次
  • 性别: Icon_minigender_1
  • 来自: 哈尔滨
文章分类
社区版块
存档分类
最新评论

设计模式与数据库的一些想法

阅读更多

数据库常用操作也就增删改查,其中查有返回结果,而增删改不返回结果。一般用java访问数据库,需要经过以下几个步骤:获得Connection,executeXXX(),释放Connection。而对于executeQuery(),还要依次遍历ResultSet。遍历的代码基本都是相似的,但你又不得不在每一个方法里都重复写。虽然对于小型的项目,Ctrl+C、Ctrl+V也很方便,但这种形式的代码复用绝对不是OO思想所能容忍的。我们要善于运用OO的继承体制真正实现代码的复用。下面的代码中需要用到数据库连接池,其具体代码请参考我的上一篇博客。

DbBean.java

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;

public abstract class DbBean {
	private ConnectionPool pool;
	private Connection conn;
	private Statement stmt;
	
	public DbBean()
	{
		pool = ConnectionPool.getInstance();
		conn = pool.getConnection();
		try {
			stmt = conn.createStatement();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	public Statement getStatement()
	{
		return stmt;
	}
	public abstract void executeSql(String sql);
}

 DbBean是一个抽象类,其中它的构造方法中实现了Statement对象的获取,executeSql方法没有实现,这是留给子类的任务。BdBean有两个子类:SelectBean和UpdateBean.这里用到了模版方法模式,把公共的方法放在父类中实现,像示例中的获得连接的方法,全部在分类的构造函数中实现。这样子类在实例化的时候,就自动继承了这些方法,但子类区别与其它子类的方法,父类就没有必要实现,所以是抽象方法,有每个子类各自实现。

SelectBean.java

import java.sql.ResultSet;
import java.sql.SQLException;

public class SelectBean extends DbBean
{
	private ResultSet rs;
	public void executeSql(String sql)
	{
		try {
			rs = getStatement().executeQuery(sql);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	public ResultSet getResultSet()
	{
		return rs;
	}
}

 

 UpdateBean.java

import java.sql.ResultSet;
import java.sql.SQLException;

public class UpdateBean extends DbBean{
	
	public void executeSql(String sql)
	{
		try {
			getStatement().executeUpdate(sql);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}
}

 ProductSelect继承于SelectBean,对应数据库中的一张表product。

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class ProductSelect extends SelectBean{

	private  List<Product> product;
	
	public List<Product> getProductList() throws SQLException
	{
		ResultSet rs = getResultSet();
		product = new ArrayList<Product>();
		while(rs.next())
			product.add(new Product(rs.getString(1),rs.getString(2),rs.getString(3),rs.getString(4)));
		return product;
	}
}

 看一下测试类

import java.sql.SQLException;
import java.util.List;

class Test {
  public static void main(String[] args) throws SQLException {
   
	  DbBean productSelect = new ProductSelect();
	  productSelect.executeSql("select * from product");
	  List<Product> productList = ((ProductSelect)productSelect).getProductList();
	  for(Product product:productList)
	  {
		  System.out.println(product.getId());
		  System.out.println(product.getName());
		  System.out.println(product.getPath());
		  System.out.println(product.getDescription());
	  }
	  
	  DbBean updateBean = new UpdateBean();
	  updateBean.executeSql("insert into product values('4','ddd','ddd','ddd')");
	  
	  productSelect = new ProductSelect();
	  productSelect.executeSql("select * from product");
	  productList = ((ProductSelect)productSelect).getProductList();
	  for(Product product:productList)
	  {
		  System.out.println(product.getId());
		  System.out.println(product.getName());
		  System.out.println(product.getPath());
		  System.out.println(product.getDescription());
	  }
  }
}

 

 

 

 

分享到:
评论
1 楼 cfwzw312 2009-07-10  
一直想写出这么一套,就是没动手。
学习了。
BZ加油!

相关推荐

    设计模式的理解浅析

    ### 设计模式的理解浅析 #### 单例模式在共享数据中的应用 单例模式是一种常用的软件设计模式,它的核心在于确保某个类只有一个实例,并提供一个全局访问点。这种模式非常适用于那些在整个项目中需要一个共享访问...

    二十三种设计模式【PDF版】

    关于本站“设计模式” Java 提供了丰富的 API,同时又有强大的数据库系统作底层支持,那么我们的编程似乎变成了类似积木的简单"拼凑"和调用, 甚至有人提倡"蓝领程序员",这些都是对现代编程技术的不了解所至. 在...

    多年的数据库设计经验总结

    与业务相关人员交流,了解他们对未来业务发展的看法,可以帮助开发者提前规划,确保数据库设计能够适应未来的变化。同时,回顾过去的项目经验,总结其中的教训,可以帮助避免重蹈覆辙。 #### 二、设计数据库表的...

    数据库设计-数据库设计

    3. **数据模式资源**:参考书籍如《数据模式资源手册》提供了丰富的数据建模实例,帮助设计者理解各种数据领域。同时,不断学习经典教材和专业书籍如《数据库系统概论》和《Oracle 7与客户/服务器计算技术从入门到...

    数据库课程设计房屋租赁

    ### 数据库课程设计房屋租赁知识点解析 #### 一、需求分析及功能说明 **1.1 系统概况** - **系统目标**:利用SQL Server数据库技术,构建一个高效的房屋租赁管理系统,旨在通过信息技术手段提升物业管理水平和服务...

    关系数据库原理及应用人力资源管理系统数据库的设计与实现.doc

    我们将使用E-R图和关系模式来描述数据库的结构,并设计出详细的逻辑数据库结构,包括各个实体和关系的定义、主键和外键的指定、索引的建立等。 在设计数据库的过程中,我们需要考虑到数据的一致性和安全性,包括对...

    2017年4月高等教育自学考试数据库系统原理真题.pdf

    3. 数据库逻辑设计:涉及将概念模型转化为逻辑模型、确定数据存储位置、设计应用程序与数据库接口,其中设计应用程序与数据库接口不属于逻辑设计任务。 4. 完整性规则:元组在主键上的值不能为空,外键和主键可以不...

    数据库名词解释.pdf

    数据库是一个精心设计、可共享的持久数据集合,具有低冗余度、高数据独立性和良好的扩展性。数据库管理系统(DBMS)是管理数据库的关键工具,它负责创建、操作和维护数据库,同时提供了定义、查询、更新和控制数据的...

    SQL数据库课程设计之唱片、人事、财务管理系统

    同时,用户模式设计考虑了不同权限的用户对信息的访问权限,例如,高级管理人员可能能看到更全面的信息,而普通员工只能查看与自己工作相关的数据。 5. 收获与体会 在项目实施后,作者反思了尚未解决的问题,比如...

    关于数据库设计的经验谈

    例如,Sybase公司的PowerDesign是一款强大的数据库设计工具,它支持多种编程语言(如PB、VB、Delphi等),并通过ODBC接口与市场上流行的三十多个数据库系统(如dBase、FoxPro、Visual FoxPro、SQL Server等)进行...

    课程设计示范正文 数据库设计

    ### 课程设计示范正文:数据库设计相关知识点 #### 一、系统需求分析 **1.1 系统调查** 在进行任何系统设计之前,全面且详细的系统调查是至关重要的第一步。这一过程旨在深入了解现有的业务流程、操作模式以及...

    sql server 2005数据库优化方法

    其次,数据库引擎优化顾问是SQL Server 2005引入的新工具,专门用于分析数据库工作负载的性能,并提供物理设计建议。这些建议可能涉及添加、删除或修改索引、索引视图和分区等结构。优化顾问有两种主要模式: 1. ...

    数据库课程设计+sql+server2005+c#+课设.doc

    3. Communication 的能力:学生需要能够清晰地表达自己的想法和设计理念,并与他人交流。 4. 团队合作的能力:学生需要能够与他人合作,完成共同的任务和项目。 课程设计的目的是为了让学生掌握数据库的原理和设计...

    数据库课程设计题目汇总范文.docx

    7. **总结与文档**:课程设计完成后,学生需撰写总结报告,包括遇到的问题、解决方案、创新点、不足之处和未来改进的想法。参考文献的引用也体现了研究和学习的严谨性。 8. **评分标准**:设计的完整性和功能性占50...

    c#写的基于数据库的聊天软件

    6. **数据库设计**:聊天软件的数据库设计可能包含用户表、聊天室表、消息表等。用户表存储用户信息,聊天室表用于管理聊天组,消息表记录每个用户的聊天记录,包括发送者、接收者、消息内容、发送时间等字段。 7. ...

    数据库课程设计题目汇总.doc

    1. **理论与实践结合**:通过课程设计,学生能将课堂上学到的数据库理论知识应用于实际问题的解决,提高分析问题的能力。 2. **系统设计思想**:培养学生利用数据库原理进行系统应用设计的思维和方法。 3. **技术...

    JSP在线考试系统-带-SQL数据库-开发模式是MVC

    这种系统通常采用MVC(Model-View-Controller)设计模式,将业务逻辑、数据处理和用户界面分离开来,提高代码的可维护性和可扩展性。 在MVC模式中: - **模型(Model)**:负责处理业务逻辑和数据管理。在这个考试...

Global site tag (gtag.js) - Google Analytics