DAO (Data Access Objects) 数据访问对象

周边任选+年卡加赠!下单送Coding Plan 卫衣/双肩包/T恤/羽绒服任选,赠CSDN会员年卡+Coding Plan,学习装备一起拿下! 阅读详情

   DAO (Data Access Objects ) 数据访问对象 是第一个面向对象 的接口,它显露了 Microsoft Jet 数据库 引擎(由 Microsoft Access 所使用),并允许 Visual Basic 开发者通过 ODBC 象直接连接到其他数据库一样,直接连接到 Access 表。DAO 最适用于单系统应用程序 或小范围本地分布使用。

      DAO就是Database Access Objects,数据访问对象 的 英文缩写。在VB中提供了两种与Jet数据库引擎接口的方法:Data控件和数据访问对象(DAO)。Data控件只给出有限的不需编程而能访问现存数据 库的功能,而DAO模型则是全面控制数据库的完整编程接口。Data控件将常用的DAO功能封装在其中,它与DAO控件的关系就好象内存与CACHE之间 的关系一样,所以这两种方法并不是互斥的,实际上,它们常同时使用。

      DAO数据访问对象(DataAccessObjects)是一种面向对象的界面接口。通过DAO/Jet功能可以访问ISAM数据库,使用DAO/ODBCDirect功能可以实现远程RDO 功能。使用DAO的程序编码非常简单,DAO提供丰富的游标(Cursor)类型 的结果集和非游标(Cursor-Less) 型的结果集,同DDL(数据描述语言)的功能很类似。现在vb数据库编程大都使用ADO ,很少人还用DAO.

      DAO是集合,对象,方法和属性;它用对象集合来处理数据库,表,视图 和索引等。使用DAO编程,可以访问并操作数据库,管理数据库的对象和定义数据库的结构等。

      DAO模型是设计关系数据库系统 结构的对象类的集合。它们提供了完成管理一个关系型数据库系统所需的全部操作的属性和方法,这其中包括创建数据库,定义表、字段和索引,建立表间的关系,定位和查询数据库等。

      Visual Basic中的数据库编程就是创建数据访问对象,这些数据访问对象对应于被访问物理数据库的不同部分,如数据库、表、字段和索引等,同时用这些对象的属性 和方法来实现对数据库的操作,以便在Visual Basic窗体中使用绑定和非绑定控件来显示操作结果并接收用户输入。

Visual Basic通过DAO和Jet引擎可以识别三类数据库:

■ VisualBasic数据库

也就是*.MDB数据库

■ 外部数据库

      它们是使用几种流行格式的“索引顺序访问方法(ISAM)”数据库,这些流行格式包括Btrieve、dBASEIII、dBASEIV、 Microsoft FoxPro versions2.0和2.5以及Paradox versions 3.x和4.0。在Visual Basic中能够创建和操作所有以上格式的数据库。也可以访问文本文件 数据库和Microsoft Excel或Lotus1-2-3电子表格。

■ ODBC数据库

      包括符合ODBC标准的客户/服务器数据库,如Microsoft SQL Server 。要在Visual Basic中创建真正的客户/服务器应用程序,可以使用ODBC Direct直接把命令传递给服务器处理。也就是说Visual Basic还支持其它不使用Jet数据库引擎的数据访问方法。数据访问对象的ODBC Direct模式 允许使用同样的对象模型和语法绕过Jet引擎直接访问ODBC数据。

      由上面的叙述可知,对于编程人员来讲,你只须了解DAO的使用,对具体的数据库系统无须做深入的探讨,就可对几乎任何一种数据库进行操作,“以不便应万 变”, 而对数据库文件自身的物理操作,将由相应的数据库引擎把数据访问对象上的这些操作转换为对数据库文件自身的物理操作,这些引擎来处理所有与各种数据库的接 口。


一、数据访问对象DAO的结构

 

      上一章我们知道了DAO是什么,它可以干什么,以及简单的了解了它是如何实现这一功能,这一章我们讲逐步学习DAO的结构。在将讲这一章之前,首先讲两个题外话:

面向对象编程

      大家对面向对象编程一定不陌生,但究竟什么是面向对象编程,很多人一下子也说不出个所以然来;在VB的DAO中又是如何体现面向对象的呢,恐怕即便是使用 了一段VB的网友也很难说清。这也难怪,VB本身并不是个完全的面向对象的编程环境,它的很多如动态数组等就不是面向对象的,但在DAO中是完全的面向对 象的。其实面向对象的最初思想就是将数据和操作封装在一起,形成对象,而在DAO中正是体现了这一点,它将数据的值作为属性,数据的查询作为方法,数据值 的变化作为事件,完全封装在DAO对象中,希望诸位盟友在使用中注意,逐步领悟面向对象的编程方法。

      数据库前端开发系统和后台系统

      经常由朋友说他会DELPHI ,会PB ,实际上用前端和后台的概念来看,他们都只是会一种前端开发工具而已,严格说起来并不能算会数据库的开发。人们往往只看到前台应用的功能而忽视了后台系统的应用,或者认为这两者根本就是一回事。前端后台概念用在单机上,就是VB与Access,用在网络中就是VB与SQL Sever,只会VB或DELPHI是不能称为掌握数据库编程的,而且在编程中,要善于利用后台数据库提供功能,这样的程序运行起来更快,程序更精练。

      题外话讲完,现在切入正题。DAO的结构如图所示:

 

 DAO

      以上是DAO整体结构图,下面将分章节逐步讲述每个对象的使用

 

二、数据访问对象DAO的功能

 

      1. DAO用来封装Data Source的..就比如,Connection conn = DAOFacotry.createConnection()..
就可以把Driver. URL. username, passpword这一些放在DAO中
以后要更改数据库的类型.比如要把MSSQL换成Oracle 的话..只需要更改DAOFacory里面的getConnection()里面的Driver.URL.之类的..

      2. DAO也是把对数据库的操作(比如最基本的CRUD操作)全部封装在里面..
比如说你要你要插入一个新的用户..那么.在DAO中我们只需要提供一个insertUser(User user)这一个方法就可以了..具体的操作是在DAO中实现的...
那么对于要调用DAO的时候.我们只要知道insertUser(User)是用来插入一个新的用户...而不需要知道是如何实现的..


一般 DAO是与Abstract Factory模式一起来用的...

Factory 来建立数据库和定位具体的DAO(比如说是UserDao..CustomerDao..)..一般将getConnection设置为static.. 也可以把HibernateSessionFactory这一个公共类放在这一AbstractFactory类中去...

public class DAOFactory {
private static final SessionFactory sessionFacotory;
// 定义一个TrheadLocal .
static Session currentSession().....
public UserDao getUserDAO() { return new UserDaoImpl(sesssion);}
pulbic OtherDao getOtherDAO() { return new OtherDaoImpl(session);}
......
}

public interface UserDao {
public insertUser(FormBean)
public updateUser(FormBean);
}
然后就实现DAO的接口: (Struts 的FormBean...VO来的..)
public class UserDaoImpl implements UserDao {
privateSession session;
public UserDaoImpl(Session session){
this.session = session;
}...
public insertUser(FormBean) {
..//..
session.save(UserPO);
..//..
return FormBean;
}
public FormBean updateUser(FormBean) {
..//..
session.update(UserPO);
..//..
return FormBean;
}
}
最后定义你的PO:
public class UserPO {
String firstname, lastname, password..........
}


Huhmmmm..........

(Copyright 2003-2005 www.sohozu.com All Rights Reserved)

三、实战应用——使用数据访问对象DAO


1 概述

Visual C++提供了对DAO的封装,MFC DAO类封装了DAO(数据库访问对象)的大部分功能,从面Visual C++程序就可以使用Visual C++提供的MFC DAO类方便的访问Microsoft Jet 数据库,编制简洁、有Visaul C++特色的数据库应用程序。

数据库访问对象(DAO)提供了一种通过程序代码创建和操纵数据库的机制。多个DAO对象构成一个体系结构 ,在这个结构里,各个DAO对象协同工作。DAO支持以下四个数据库选项:


打开访问数据库(MDB文件)——MDB文件是一个自包含的数据库,它包括查询定义、安全信??须指定MDB文件的路径名。


直接打开ODBC数据源——这里有一个很重要的限制。不能找开以Jet引擎作为驱动程序的ODBC数据源;只可以使用具有自己的ODBC驱动程序DLL的数据源。


用 Jet引擎找开ISAM型(索引顺序访问方法)数据源(包括dBase,FoxPro,Paradox,Btrieve,Excel或文本文件)——即使 已经设置了ODBC数据源,要用Jet引擎来访问这些文件类型中的一种,也必须以ISAM型数据源的方式来找开文件,而不是以ODBC数据源的方式。


给 ACCESS数据库附加外部表——这实际上是用DAO访问ODBC数据源的首选方法。首先使用ACCESS把ODBC表添加到一个MDB文件上,然后依照 第一选项中介绍的方法用DAO找开这个MDB文件就可以了。用户也可以用ACCESS把IASM文件附加到一个MDB文件上。


2 应用DAO编程


2.1 打开数据库
CDaoWorkspace对象代表一个DAO Workspace对象,在MFC DAO体系结构中处于最高处,定义了一个用户的同数据库的会话,并包含打开的数据库,负责完成数据库的事务处理。我们可以使用隐含的workspace对象。

CDaoDatabase对象代表了一个到数据库的连接,在MFC中,是通过CDaoDatabase封装的。

在构造CDaoDatabase对象时,有如下两种方法:


创建一个CDaoDatabase对象,并向其传递一个指向一个已经找开的CdaoWorkspace对象的指针。


创建一个CDaoDatabase对象,而不明确地指定使用的workspace,此时,MFC将创建一个新的临时的CDaoWorkspace对象。

如下代码所示:

CDaoDatabase db ;

db.Open(“test.mdb”,FALSE,FALSE,_T(“”);

其中参数一包括要打开的文件的全路径名。


2.2 查询记录
一个DAO recordset对象,代表一个数据记录的集合,该集合是一个库表或者是一个查询的运行结果中的全部记录。CDaoRecorset对象有三种类型:表、动态集、快照。

通常情况下,我们在应用程序中可以使用CDaoRecordset的导出类,这一般是通过ClassWizard或AppWizard来生成的。但我们也可以直接使用CDaoRecordset类生成的对象。此时,我们可以动态地绑定recordset对象的数据成员。

如下代码所示:

COleVariant var;

long id;

CString str;

CDaoRecordset m_Set(&db);

m_Set.Open(“查询的SQL语句”);

while(!m_Set.IsEOF())

{

/*

处理

m_Set.GetFieldValue(“ID”,var);

id=V_I4(var);

m_Set.GetFieldValue(“Name”,var);

str=var.pbVal;

*/

m_Set.MoveNext();

}

m_Set.Close();

 

2.3 添加记录

添加记录用AddNew函数,此时用SetFieldValue来进行赋值。

如下代码所示:

m_pDaoRecordset->AddNew ();

sprintf(strValue,"%s",>m_UserName );

m_pDaoRecordset->SetFieldValue ("UserName",strValue);

sprintf(strValue,"%d",m_PointId );

m_pDaoRecordset->SetFieldValue ("PointId",strValue);

dataSrc.SetDateTime (m_UpdateTime .GetYear ), m_UpdateTime .GetMonth ), m_UpdateTime .GetDay (),

m_UpdateTime .GetHour (),m_UpdateTime .GetMinute (),m_UpdateTime .GetSecond ());

valValue=dataSrc;

m_pDaoRecordset->SetFieldValue ("UpdateTime",valValue);

sprintf(strValue,"%f",m_pRecordset->m_OldValue );

m_pDaoRecordset->SetFieldValue ("OldValue",strValue);

sprintf(strValue,"%f",m_pRecordset->m_NewValue );

m_pDaoRecordset->SetFieldValue ("NewValue",strValue);

m_pDaoRecordset->Update ();

此时,要注意,日期时间型数据要用SetDataTime函数来赋值,这里面要用到COleVariant类型数据,具体用法可以参考有关帮助。

 

2.4 修改记录

修改记录用Edit()函数,把记录定位到要修改的位置,调用Edit函数,修改完成后,调用Update函数。

如下代码所示:

m_Set.Edit();

m_Set.SetFieldValue(“列名”,”字符串”);

m_Set.Update();


2.5 删除记录

删除记录用Delete()函数,使用后不需调用Update()函数。


2.6 统计记录

可以使用如下代码来统计记录数:

COleVariant varValue;

CDaoRecordset m_Set(&db);

m_Set.Open(dbOpenDynaset,”SQL语句”);

varValue=m_Set.GetFieldValue(0);

m_lMaxCount=V_I4(&varValue);

m_Set.Close();


如果是统计一张表中总记录,可以使用CDaoTableDef对象,如下代码所示:

CDaoTableDef m_Set(&gUseDB);

Count=m_Set.GetRecordCount();

m_Set.Close();

不能用CDaoRecordset对象的GetRecordCount()来取得记录数。

3 总结

使用DAO技术可以便我们方便的访问Microsoft Jet引擎数据库,由于Microsoft Jet不支持多线程 ,因此,必须限制调用到应用程序主线程的所有DAO。(来源CNET Networks )

直接通过DAO读写Access文件 直接利用DAO来创建、读写Access文件,总的说来,比直接通过ODBC读、写Excel文件来讲,要简单一些。在下面的示例中,我们将用到两种方法:SQL和DAO类函数来混合实现它们,这样做的目地,我想可以使大家更加方便灵活的运用它们来完成你想要做的东西。在示例程序中默认定创建数据库名为:demo.mdb,内部表名为:demo,写入两个字段:Name和Age,采用和读写Excel类似的操作,你也可 阅读详情

相关推荐

VC直接通过DAO读写Access文件

<!-- alimama_pid="mm_10249644_1605763_4929893"; alimama_titlecolor="707070"; alimama_descolor ="CCCCCC"; alimama_bgcolor="FFFFFF"; alimama_bordercolor="FFFFFF"; alimama_linkcolor="DADA

3569

DAOdata(base) access object

文章目录DAO及相关实现类DAO 类XxxDAO:规范对某张表的常用操作XxxDAOImpl:对XxxDAO的继承以及实现其相应规范的接口 DAO及相关实现类 DAOData Access Object访问数据信息的类和接口,包括了对数据的CRUD(Create、Retrival、Update、Delete),而不包含任何业务相关的信息。有时也称作:BaseDAO 作用:为了实现功能的模块化,更有利于代码的维护和升级。 DAO 类 其中的方法 下面第一张图中的代码块是获取父类声明的泛型,因为子

下雨了亦留此地的博客 347

Dao Jet数据库引擎

Dao Jet数据库引擎,当WINDOWS中没有带这个数据库引擎时,可以选择手动安装 Dao Jet数据库引擎

DAO(Data Access Object)数据访问对象

一.概念理解 通过封装对数据源的所有访问,管理与数据源的连接获取其中的数据,实现与数据源的相关的访问机制。 解决的问题:业务对象数据访问代码完全耦合在一起,代码混乱,不容易扩展,业务对象应该关注的是业务逻辑,不应该关心数据存取的细节,DAO商业组件只对他的客户端暴露一些非常简单的DAO外部接口,而将数据源的实现细节对客户端完全的隐藏了起来.DAO低层数据源的实现发生改变时不影响客户端和商业组件之...

weixin_44250157的博客 2158

DAO与Servlet

Java-DAO模式与ServletDAO模式什么是dao模式?信息系统的开发架构DAO(Data Access Object)介绍DAO设计模式的结构DAO的好处Properties类(配置文件)ServletServlet简介Servlet 执行过程Servlet接口实现类配置ServletServlet 生命周期 DAO模式 什么是dao模式? DAOData Access Object)顾名思义是一个为数据库或其他持久化机制提供了抽象接口的对象,在不暴露底层持久化方案实现细节的前提下提供了各种数据

qq_27630677的博客 3275

MVC的各层之间的联系

业务逻辑:Controller--&gt;service接口--&gt;serviceImpl--&gt;dao接口--&gt;daoImpl--&gt;mapper--&gt;db   一:Dao(Data Access Object):数据存储对象      不管是什么框架,我们很多时候都会与数据库进行交互。如果遇到一个场景我们都要去写SQL语句,那么我们的代码就会很冗余。所以,我们就想到...

qq_42043786的博客 1587

详解DAO类(数据库操作对象

DAO类下的各种关系可以用一张图来表示。 1.DAO类介绍: 1.介绍 1) DAO=DataBase Access Object; 数据库操作对象 2) 在一个DAO类中封装针对某张表操作细节 3) 在项目中所有的DAO类都应该存放在dao包 4) DAO类命名规则 = 表名+Dao DeptDao/EmpDao 例如这样一张表。 1.实体类介绍: 一个实体类用于描述一张表的结构 2) 实体类的类名应该与表名相同的 dept.frm-------- Dept.class 3) 实体类的属性名应该

m0_45311187的博客 1万+

PHP设计模式-DAO (Data Access Objects) 数据访问对象模式

整理一下自己的学习Aaron Saray 写的PHP设计模式一些demo和自己的理解。大佬看完如果发现鄙人理解有误请立即出,感谢拍砖,跪求鞭打 /** * DAO (Data Access Objects) 数据访问对象 * ------------------------------------- * ** 来自说明 ** ...

weixin_34260991的博客 152

php dao模式数据库更改_PHP设计模式-DAO (Data Access Objects) 数据访问对象模式

整理一下自己的学习Aaron Saray 写的PHP设计模式一些demo和自己的理解。大佬看完如果发现鄙人理解有误请立即出,感谢拍砖,跪求鞭打/*** DAO (Data Access Objects) 数据访问对象* -------------------------------------* ** 来自说明 **** 数据访问对象设计模式描述了如何创建提供透明访问任何数据源的对象** 目的...

weixin_33122947的博客 149

转载]ADO和DAO的区别

[转载]ADO和DAO的区别 ADO Compared with RDO and DAO http://msdn.microsoft.com/en-us/library/aa261340(VS.60).aspx ADO isn't automatically code-compatible with your existing data access applications. ...

318

ADO和DAO的区别

ADO(ACTIVEX DATA OBJECTS)应用层的数据访问接口ODBC 数据库驱动接口OLE DB 系统级数据访问接口DAO (DATA ACCESS OBJECTS) 对象数据访问接口ADO是基于全新的OLE DB技术而设计的.是一种基于应用程序层的数据访问接口.它是DAO/RDO的后继产物.DAO是VB最先采用的面向对象数据访问接口,通过DAO访问MICROSOFT JET数据库引...

weixin_34216196的博客 674

dao3.5数据库+引擎.zip

Data Access Object 3.5数据库安装程序+数据库引擎文件

dao3.5数据库安装文件

DAO数据库安装文件。

设计模式-DAO:Data Access Object 数据访问对象

https://blog.csdn.net/xw_classmate/article/details/50685103 使用DAO设计模式来封装数据库持久层所有操作(CRUD) ,使低级的数据逻辑和高级的业务分离,达到解耦合的目的。 一个典型的DAO实现有如下的组件: 1)一个DAO接口 2)一个实现了DAO的具体实现类 3)一个DAO工厂类 4)数据传输对象(有时称为值对象) ★ DAO的理解 1、DAO其实是利用组合工厂模式来解决问题的,并没有带来新的功能,所以学的其实就是个思路。 .

a19576的专栏 263

DAO(Data Access Objects)数据访问层介绍

DAO(Data Access Objects)数据访问层介绍介绍目录:(1)DAO设计模式简介(2)一般企业分层架构(3)DAO设计模式(5)DAO层实现例子什么是dao模式,dao模式的实现方法(1)DAO设计模式简介1)、DAO全称是(Data Access Objects)数据库访问对象,主要的功能就是用于进行数据操作的,在程序的标准开发架构中属于数据访问层的操作。2)、DAO层一般有...

helloxiaozhe的博客 1万+

DAO数据访问对象Data Access Object

持久化是将程序中数据库在瞬时状态和持久状态间转换的机制JDBC是一种持久化的机制,将程序直接保存成文本文件也是持久化机制的一种实现JDBC的封装:原因:JDBC将程序中的数据持久化保存到MySQL数据库以及使用Java程序对数据库数据进行持久化操作(增,删,改,查,保存,读取)程序持久化保存在不同平台(Oracle,SQL,Server)业务代码和数据访问代码完全耦合在一起,代码混乱,逻辑不清晰,...

彦玺@ 5213

Dao 设计模式(Data Access Object

博主声明: 转载请在开头附加本文链接及作者信息,并标记为转载。本文由博主威威喵原创,请多支持与教。 本文首发于此 博主:威威喵|博客主页:https://blog.csdn.net/smile_running Dao 设计模式(Data Access Object),称为数据访问对象。它是对于数据库操作的一种设计方式,把Dao设计为一个通用接口,提供对数据库进行...

你若盛开,蜜蜂自来 7217
上一篇: 系统测试报告编写规范
下一篇: 掌握 Ajax,第 1 部分: Ajax 入门简介
Java2King
博客等级 码龄18年 221粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值