预备知识:抽象工厂:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
适用性:1.一个系统要独立于它的产品的创建、组合和表示时。
2.一个系统要由多个产品系列中的一个来配置时。
3.当你要强调一系列相关的产品对象的设计以便进行联合使用时。
4.当你提供一个产品类库,而只想显示它们的接口而不是实现时。
DAO: Data Access Object.
:a Data Access Object provides the operations to create, delete, update, and find data in a database. (提供了对数据库增删改查的操作的方法. DTO: Data Transfer Objects(数据操作转换的对象,就是操作对象的一个类型的实例) -- ===================================================================================
1.连接工厂(Connection Factory):获得数据库的连接
2.DAO Factory: 获得不同的DAO
3.构建一个抽象工厂(Abstract Factory): 需要进行数据库的判断,根据不同的数据库提供不同的Factory 比如:OracleDaoFactory, SqlDaoFactory 以上的Factory均继承Factory.
4.构建DAO步骤:
(1)需要一个DAO接口,接口;里面定义增删改查方法.
(2)用具体的实现类,实现接口中的方法,对于不同的数据库.创建不同的实现操作类.
5.调用步骤: (1)根据不同的数据库,从Connection Factory中获取连接.
(2)从DAO Factory中获得不同的DAO 工厂模式的优化: 将连接工厂封装到数据库工厂里面,对于具体的数据库进行具体的连接操作. 即:指定了数据库,那么我就可以进行指定的数据库连接操作了. -- ====================================================================================
具体实现如下: (仅实现了SQL Server2005 的连接,实现的一个添加的操作.其他的可以按照这个具体实现) 首先,定义一个DTO,我这里定义一个Student类: 属性为:学生姓名,密码和学号.代码如下:
public class Student {
//学生姓名
private String stuName;
//密码
private String stuPwd;
//学生学号
private int stuId;
//get和set方法
public String getStuName()
{
return stuName;
}
public void setStuName(String stuName)
{
this.stuName = stuName;
}
public String getStuPwd() {
return stuPwd;
}
public void setStuPwd(String stuPwd) {
this.stuPwd = stuPwd;
}
public int getStuId() {
return stuId;
}
public void setStuId(int stuId) {
this.stuId = stuId;
}
}
/*------------------------------------------------------------------------------*/
现在,我们建立一个DAO的接口,定义对数据库student的增删改查操作具体的实现由确定数据库后进行操作.具体代码如下:
public interface IStuOperDao {
/** * 添加学生 * @param stu 学生对象 */
public int addStu(Student stu);
/** * 按照学号删除学生信息 * @param stuId 学生学号 */
public int delStu(int stuId);
/** * 根据学生学号来获取学生信息 * @param stuId 学生学号 */
public Student getStu(int stuId);
/** * 根据学号 修改学生信息 * @param stuId 学生学号 * @return 影响行数 */
public int updateStu(int stuId); }
/*--------------------------------------------------------------------*/
在这个接口的实现类中,对每个数据库我们都应该定义一个实现类,因为每种数据库的操作是不同的这也是我们在这里定义接口的好处,可以很方便地添加新的数据库实现. 这里具体实现的为SQL Server 2005的实现类.具体代码如下:
public class SqlStuOperDAOImp implements IStuOperDao {
private Connection conn;
/** * 利用构造函数对conn进行初始化 * * @param conn */
public SqlStuOperDAOImp(Connection conn) {
this.conn = conn;
}
@Override
public int addStu(Student stu) {
Statement stmt = null;
//执行的SQL语句
String sql = "insert into student values('" + stu.getStuName() + "','" + stu.getStuPwd() + "')";
int num = 0;
try {
//获取连接的Statement对象
stmt = conn.createStatement();
//执行SQL语句,返回影响的行数
num = stmt.executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace(); }
finally{ //关闭资源.
try { if (stmt != null) { stmt.close(); }
if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } return num; }
@Override
public int delStu(int stuId) {
// TODO Auto-generated method stub return 0;
}
@Override
public Student getStu(int stuId) {
// TODO Auto-generated method stub return null;
}
@Override
public int updateStu(int stuId) {
// TODO Auto-generated method stub return 0;
} }
/*--------------------------------------------------------------------*/
现在,开始创建一个抽象工厂,判断不同的数据库,对不同的数据库,实例化不同的子类. 同时定义一个抽象方法,让其子类实现具体的操作.具体代码如下: /** * 构建抽象DAO工厂 * 此工厂根据不同的数据库产品得到对应数据库工厂
* @author Mc * */
public abstract class DaoFactory {
//SQL Server数据库的标识 private static final int sqlFlag =1;
//Oracle数据库的标识 private static final int oracleFlag = 2;
/** * 根据数据库的不同,获得不同的DAO工厂 * @param flag * @return */
public static DaoFactory getDaoFactory (int flag){
switch (flag) {
case sqlFlag: return new SqlDaoFactory();
case oracleFlag: return new OracleDaoFactory();
default: return null;
} }
//抽象方法,子类具体实现,不同的数据库子类实现其对应的方法
public abstract IStuOperDao getStuOperDao();
}
/*--------------------------------------------------------------------*/
其子类的实现类为对应的不同的数据库,我这里实现的是对SQL Server 2005数据库. 具体代码如下:
public class SqlDaoFactory extends DaoFactory {
//数据库名称 private static String url = "jdbc:sqlserver://127.0.0.1:1433;databasename=J1106";
//数据库驱动 private static String driveName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
//数据库帐号 private static String userName = "sa";
//数据库密码 private static String userPwd = "123";
@Override public IStuOperDao getStuOperDao() {
//先建立连接 Connection conn =null; try {
//第一步,加载驱动 Class.forName(driveName);
if (conn == null) {
conn = DriverManager.getConnection(url,userName,userPwd);
} } catch (ClassNotFoundException e) {
e.printStackTrace(); } catch (SQLException e)
{ e.printStackTrace(); }
//返回对应的操作实现类
return new SqlStuOperDAOImp(conn);
} }
/*------------------------------------------------------------------------------------*/
到这里,工厂模式已经基本实现了,那么我们用一个类来测试一下
public class Client { public static void main(String[] args) {
//获得SqlServerDaoFactory
DaoFactory factory = DaoFactory.getDaoFactory(1);
//获得StuOperDao
IStuOperDao iod = factory .getStuOperDao();
//示例化一个学生
Student stu = new Student(); stu.setStuName("Mc"); stu.setStuPwd("123520");
//添加用户 int num = iod.addStu(stu);
if (num > 0) {
System.out.println("添加成功~"); }
else {
System.out.println("添加失败");
} } }
/*------------------------------------------------------------------------------------*/ 最后打印出: 添加成功~ 然后在数据库中查询到已经添加成功了.
分享到:
相关推荐
在VB(Visual Basic)中,DAO(Data Access Objects,数据访问对象)是Microsoft提供的一种用于与数据库进行交互的早期技术。...如果你正在尝试使用DAO进行数据库开发,这个资源将是一个很好的起点。
这种方式不用配置数据源,虽然代码比较多,但是很好理解的。 下面是通过请求来获取数据库的绝对路径方式连接的代码: ```java String path = application.getRealPath("/index.jsp"); path = path.substring(0,...
通过实践上述示例,你可以更好地了解如何在实际项目中应用DAO进行数据库操作。在www.NewXing.com这个网站上,可能会有更多相关的教程和实例代码可供学习和参考,帮助你深入掌握VB6与DAO的使用。
在IT行业中,数据库是存储和管理数据的核心工具,而DAO(Data Access Object)...对于初学者来说,这是一个很好的实践项目,能够深入理解数据库操作与业务逻辑之间的关系,以及如何在实际项目中实现数据访问的抽象。
在IT领域,尤其是在软件开发中,使用VC++(Visual C++)进行编程时,有时我们需要与数据库进行交互,Access数据库是Microsoft Office套件中的一...对于初学者来说,这是一个很好的起点,可以逐步了解数据库编程的基础。
在IT行业中,人事管理系统是...对于初学者来说,这是一个很好的实践项目,可以帮助他们深入理解Java编程和数据库应用。对于经验丰富的开发者,这样的项目可以作为提升技术能力,尤其是数据库设计和后端开发技能的平台。
联系数据库很好的程序”,意味着这个程序的代码质量较高,能够有效地连接和操作数据库,实现了类似金山词霸生词本的功能,即用户可以存储、管理、查看和学习词汇。 标签中重复了标题的信息,强调了DAO数据库、MFC和...
JDBC连接池也是JSP应用中常用的技术,它可以有效地管理数据库连接,避免频繁创建和关闭连接带来的性能开销。 当我们涉及到SQL Server和MySQL这两个具体的数据库系统时,需要理解它们的特性和使用方式。SQL Server是...
总的来说,"struts2简单登录注册(连接数据库)"项目是一个典型的Java Web开发实例,涵盖了前端交互、后端处理、数据库操作和服务器部署等多个环节,是学习和理解Struts2框架及其相关技术的好案例。通过深入研究这个...
【饭店管理系统】是一款基于MFC(Microsoft Foundation Classes)...对于学习MFC编程和数据库应用的开发者,这是一个很好的实践案例,可以从中学到如何结合MFC进行数据库操作以及如何设计和实现功能丰富的应用程序。
在本实例中,我们将深入探讨如何使用JSP(JavaServer Pages)来实现与MySQL数据库的连接。这是一个典型的JavaWeb应用程序,它涵盖了...这个实例对于初学者来说是很好的学习资源,有助于理解JavaWeb开发中的关键概念。
本篇文章将深入探讨如何使用VC++通过DAO(Data Access Objects,数据访问对象)接口与ACCESS数据库进行交互,并将查询结果动态地显示在列表控件上,这对于初学者来说是一次很好的学习实践。 首先,DAO是Microsoft ...
标题“DAO_vb.net数据库应用_poetryuke_”暗示了这个压缩包主要包含关于使用VB.NET...通过学习和实践这些示例,开发者可以更好地理解和掌握VB.NET中的DAO模式,以及如何利用.NET Framework处理数据库和网络通信。
DAO类包含连接数据库、执行SQL和处理结果集的方法,这样业务逻辑代码可以专注于业务处理,而不涉及具体的数据库操作。 此外,项目中的PPT介绍可能会涵盖系统的架构设计、数据库设计原则以及Java编程的一些基本概念...
综上所述,这种“很好的数据库访问方式”可能是基于ORM的,具有跨数据库支持的能力,通过数据访问层和对象关系映射技术,提高了开发效率和代码的可维护性。同时,它还强调了性能优化和安全性,确保了数据的高效管理...
在IT领域,数据库是存储和管理数据的核心工具,而连接数据库是进行数据操作的第一步。这份"连接各种数据库的源代码资料"包含了多种数据库的连接示例,对于开发者来说是一份非常宝贵的资源。下面,我们将深入探讨如何...
这对于初学者来说是一个很好的起点,可以帮助理解MyBatis的基础操作。 1. **MyBatis简介** MyBatis消除了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解来配置和原始映射,将...
【编译数据库--初学者很好的助手】这篇内容主要讲解了数据库编程的基础知识,特别是对于初学者来说非常有帮助。在微机普及的背景下,数据库在商业应用中的重要性日益凸显,早期的数据库工具如dBase II逐渐发展为现代...
`dao.class.php`:这个文件可能包含了DAO的基类或接口,定义了通用的方法,如连接数据库、执行SQL语句、处理结果集等。在PHP中,DAO类通常包含如insert、update、delete和select等操作,用于对数据库进行CRUD(创建...
DAO的优势在于与ACCESS数据库有很好的集成,但相对于ODBC和ADO,其跨平台性和性能稍弱。 3. ADO:是微软推出的一种更现代的数据库访问技术,基于OLE DB。ADO提供了一个更简洁、高效的接口,可以直接使用COM...