首页资源分类电源技术 > Windows CE下建立数据库的几种方法.pdf

Windows CE下建立数据库的几种方法.pdf

已有 456409个资源

下载专区

文档信息举报收藏

标    签: WindowsCE下建立数据库的几种方法

分    享:

文档简介

Windows CE下建立数据库的几种方法.pdf

文档预览

第 22 卷第 3 期     2005 年 3 月    计算机应用与软件 Computer Applications and Software Vol122 ,No13 Mar. 2005 Windows CE 下建立数据库的几种方法 赵  勇  董德存 (同济大学交通运输学院  上海 200331) 摘  要   随着掌上电脑和智能手机等移动设备的广泛普及 ,移动计算渐成热点 。本文介绍了和移动计算息息相关的几种建立移 动数据的方法 。 关键词   PDA  数据库  SQL Server CE SOME METHODS OF CREATING DATABASE IN WINDOWS CE Zhao Yong  Dong Dechun ( School of Traffic & Transportation , Tongji University , Shanghai 200331 , China) Abstract   With the development of PDA and smart phone ,the mobile computing has got more concern. Several methods of creating mobile data2 bases related to mobile computing are in introduced in this paper. Keywords   PDA  Database  SQL Server CE 1  嵌入式移动数据库的介绍 嵌入式移动数据库系统是支持移动计算或某种特定计算模 式的数据库管理系统 ,数据库系统与操作系统 、具体应用集成在 一起 ,运行在各种智能型嵌入设备或移动设备上 。其中 ,嵌入在 移动设备上的数据库系统由于涉及数据库技术 、分布式计算技 术 ,以及移动通讯技术等多个学科领域 ,目前已经成为一个十分 活跃的研究和应用领域 ———嵌入式移动数据库或简称为移动数 据库 ( EMDBS) 。 嵌入式移动数据库技术目前已经从研究领域向广泛的应用 领域发展 ,各种嵌入式移动数据库产品纷纷涌现 。例如 Pocket Access ,MS SQL Server for CE ,Sybase CE DB2 CE等 。本文介绍的 建立数据的方法除了第一种方法外 ,其他都是建立基于 MS SQL Server for CE 上面的数据库 。 2  Windows CE 下建立数据库的几种方法 211  用 CCeDBDatabase 建立数据库 Windows CE 提供了一组独特的数据库 API ,在 Windows CE 实现的数据库很简单 ,它只有一个层次 ,并且最多可以有 4 种排 序索引 ,但是它却可以作为一个强有力的工具来组织一些不太 复杂的数据 。 MFC 为 Windows CE 提供了 4 个数据库类 ( CCeDBDatabase , CCeDBRecord ,CCeDBProp and CCeDBEnum) 。下面代码用 CCeDB2 Database 实现了在 PDA 端建立数据库 。这个数据库中的表有四 “字段”(严格意义上讲不能说是字段 ,所以这里加引号) : PROP LASTNAME ,PROP FIRSTNAME , PROP AGE , PROP GENDER。 建立了数据库后我们向表中插入了两条记录 。 ∥定义数据的识别码 、数据库名和记录属性的识别码 const DWORE DB IDENT PEOPLE = 12345 ; const WCHAR DB NAME PEOPLE[ ] = T(″People″) ; const WORD PROP LASTNAME = 101 ,      PROP FIRSTNAME = 102 ,      PROP AGE = 103 ,      PROP GENDER = 104 ;   if (CCeDBDatabase ∷Exists (DB NAME PEOPLE) )          ∥如果要建立的数据库已经存在 ,CCeDBDatabase ∷ Create 会报错          ∥所以要先检查是否存在同名数据库 。   {    CCeDBDatabase db ;    db. Open (DB NAME PEOPLE) ;    if ( ! db. Delete () )    MessageBox(L″delete error″,L″error″,MB OK) ;    else    MessageBox(L″delete success″,L″success″,MB OK) ; } ∥定义数据库变量 CCeDBDatabase db ; CEOID poid ; CCeDBProp SortProps[ 3 ] = {   CCeDBProp (CCeDBProp ∷Type String ,PROP LASTNAME , CCeDBProp ∷Sort Ascending| CCeDBProp ∷Sort CaseInsensitive) ,   CCeDBProp (CCeDBProp ∷Type UShort ,PROP AGE , CCeDBProp ∷Sort Descending) ,   CCeDBProp (CCeDBProp ∷Type UShort ,PROP GENDER , CCeDBProp ∷Sort UnknownFirst) } ; ∥数据库各“字段”的名称 、类型和排序属性 收稿日期 :2003 - 12 - 30 。赵勇 ,硕士生 ,主研领域 :PDA 在智能小区 中的应用 。   第 3 期     赵勇等 :Windows CE 下建立数据库的几种方法  49 if ( ! (poid = db. Create (DB NAME PEOPLE , DB SortProps) ) )   MessageBox(L″f1″,L″error1″,MB OK) ; if ( ! db. Open (poid) )   MessageBox(L″f2″,L″error2″,MB OK) ; ∥添加记录 IDENT PEOPLE , 3 , CCeDBRecord rec ; CCeDBProp props[ 4 ] ; CString str (″smith″) ; props[ 0 ] = CCeDBProp ( (LPWSTR) (LPCTSTR) str ,PROP LASTNAME) ; str = ″bob″; props[ 1 ] = CCeDBProp ( (LPWSTR) (LPCTSTR) str ,PROP FIRSTNAME) ; props[ 2 ] = CCeDBProp ( (USHORT) 34 ,PROP AGE) ; props[ 3 ] = CCeDBProp ( (USHORT) ′M′,PROP GENDER) ; rec. AddProps(props ,4) ; if ( ! db. AddRecord ( &rec) ) MessageBox(L″添加记录失败″,L″错误″,MB OK) ; rec. DelectAllProps() ; str = ″evans″ props[ 0 ] = CCeDBProp ( (LPWSTR) (LPCTSTR) str ,PROP LASTNAME) ; str = ″pat″; props[ 1 ] = CCeDBProp ( (LPWSTR) (LPCTSTR) str ,PROP FIRSTNAME) ; props[ 2 ] = CCeDBProp ( (USHORT) 41 ,PROP AGE) ; props[ 3 ] = CCeDBProp ( (USHORT) ′F′,PROP GENDER) ; rec. AddProps(props ,4) ; ∥增加了最后一个属性后删除 rec. DeleteProp ( PROP GENDER) ; if ( ! db. AddRecord ( &rec) ) MessageBox(L″添加记录失败″,L″错误″,MB OK) ; MessageBox(L″添加记录成功″,L″成功″,MB OK) ; 以上代码虽然实现了在 PDA 端建立数据的功能 ,但实际上 这个数据库只是相当于一个很大的表 。更重要的是如果用它和 PC 机上的数据进行同步的话 ,是非常困难的 。 212  用 OL EDB 建立数据库 用 OLEDB 可以在 PDA 端建立后缀名为 sdf 的数据库 ,这个 数据库可以和 PC 机上的 SQL Server 数据库同步 ,而且 OLEDB 操 作数据库的效率是最高的 。当然 ,由于 OLEDB 编程本身比较烦 琐 ,对于没有经验的编程人员来说需要花费一定的时间去熟悉 OLEDB 的机制 。下面是在 EVC410 下的代码实现 : ∥对象声明 HRESULT      hr            = NOERROR ; DBPROPSET   dbpropset [ 2 ] ; DBPROP   dbprop [1 ] ; ∥用来初始化 provider 的属性数组 DBPROP   sscedbprop [2 ] ; ∥SSCE 安全属性的属性数组 INT    i    =0; IDBDataSourceAdmin  3 pIDBDataSourceAdmin   = NULL ; IUnknown    3 pIUnkownSession   = NULL ; ∥建立一个 OLE DB provider 的示例 hr = CoCreatelnstance (CLSID SQLSERVERCE 2 0 ,0 ,CLSCTX INPROC SERVER ,   IID IDBDataSourceAdmin , (void 3 3 ) &pIDBDataSourceAdmin) ; if ( FAILED(hr) ) {   goto Exit ; } ∥对 property 结构初始化 Variantlnit ( &dbprop [ 0 ] . vValue) ; for (int i = 0 ;i < sizeof (sscedbprop) / sizeof (sscedbprop [ 0 ]) ;i + + ) {   Variantlnit ( &sscedbprop [ i ] . vValue) ; } ∥指定数据库的名字属性 dbprop [ 0 ] . dwPropertylD = DBPROP INIT DATASOVRCE ; dbprop [ 0 ] . dwOptions = DBPROPOPTIONS REQUIRED ; dbprop [ 0 ] . vValue. vt = VT BSTR ; dbprop [ 0 ] . vValue. bstrVal = SysAIIocString(L″NewDatabase. sdf″) ; if (NULL = = dbprop [ 0 ] . vValue. bstrVal) {   hr = E OUTOFMEMORY;   goto Exit ; } ∥指定数据库的加密属性 sscedbprop [ 0 ] . dwPropertyID = DBPROP SSCE ENCRYPTDATABASE ; sscedbprop [ 0 ] . dwOptions = DBPROPOPTIONS REQUIRED ; sscedbprop [ 0 ] . vValue. vt = VT BOOL ; sscedbprop [ 0 ] . vValue. boolVal = VARIANT TRUE ; ∥指定密码 sscedbprop [ 1 ] . dwPropertyID = DBPROP SSCE DBPASSWORD ; sscedbprop [ 1 ] . dwOptions = DBPROPOPTIONS REQUIRED ; sscedbprop [ 1 ] . vValue. vt = VT BSTR ; sscedbprop [ 1 ] . vValue. bstrVal = SysAllocString(L″mypassword″) ; if (NULL = = sscedbprop [ 1 ] . vValue. bstrVal) {   hr = E OUTOFMEMORY;   goto Exit ; } ∥初始化属性设置 dbpropset [ 0 ] . guidPropertySet = DBPROPSET DBINIT; dbpropset [ 0 ] . rgProperties = dbprop ; dbpropset [ 0 ] . cProperties = sizeof (dbprop) / sizeof (dbprop [ 0 ]) ; dbpropset [ 1 ] . guidPropertySet = DBPROPSET SSCE DBINIT; dbpropset [ 1 ] . rgProperties = sscedbprop ; dbpropset [ 1 ] . cProperties = sizeof (sscedbprop) / sizeof (sscedbprop [ 0 ]) ; ∥初始化数据库 hr = plDBDataSourceAdmin - > CreateDataSource ( sizeof ( dbpropset) / sizeof ( dbpropset [0 ] ,) dbpropset ,NULL ,IID IUnknown , &pIUnknownSession) ; if ( FAILED(hr) ) {   goto Exit ; } ∥这里一个新的加密数据库建立了. Exit ; ∥这里应该释放 com 接口 ,限于篇幅省略 1 return ; 从上面的代码可以看出 ,用 OLEDB 建立数据需要写很多代 码 ,由于 OLEDB 本质上是一个 COM 接口 ,所以要求编程人员对 COM 有一定的了解 ,这对于初学编程的人来说多少会带来一些 困难 。 213  ADOXCE ADO 是微软对 OLEDB 的封装 ,使得数据库编程变得格外容 易 ,微软为 Windowos CE 也提供类似于 ADO 的 ADOCE ,ADOXCE    50     计算机应用与软件 2005 年 又是对 ADOCE 的扩展 。但是 ADOXCE 是专门为 EVB 设计的 。 以下代码是在 EVB 中用 ADOXCE 建立一个名称 MyDatabase 数 据库的例子 。 Dim cat As ADOXCE. Catalog Set cat = CreateObject (″ADOXCE. Catalog. 3. 1″) cat . Create ″Provider = Microsoft . SQLSERVER. OLEDB. CE. 2. 0 ;data source = \ MyDatabase. sdf″ 代码 很 简 单 。但 是 这 样 建 立 起 来 的 数 据 库 效 率 不 如 OLEDB 的高 。以上三种方法是完全通过编程在 PDA 设备端建 立数据的常用方法 ,如果要是选择还有两种方法是通过同步远 程数据库来建立 PDA 端的数据库 。一种是通过 RDA 中 PULL 方 法把远程的数据库中的一个表 PULL 到本地 ,可以对这个表进 行修改 ,再通过 PUSH 方法使远程表和本地表一致 ;还有一种是 Replication 中的 AddSubscription 方 法 。这 两 种 方 法 在 SQLServer CE 的帮助文件中有详细的描述 。 214  查询分析器 还有一个更简单的在 PDA 端建立数据库的方法 ,那就是通 过 SQL Server CE 中的查询分析器来建立数据库 。唯一不大方便 的是 PDA 没有普通 PC 机的键盘 ,在输入数据库名字表名以及 字段名的时候需要有点耐心 。 3  结  论 以上介绍了在 Windows CE 下建立数据库的几种方法 。简 单来说 ,如果我们选择 EVB 进行开发应用程序的话 ,Adoce 或 Adoxce 是个比较好的选择 。如果用 EVC 开发且不需要和 PC 机 数据同步的话 ,选择 CCeDBDatabase 比较简单 ;如果需要同步的 话 ,用 RDA 或 Replication 比较合适 ;当对数据库查询等操作效率 有很高要求时最好用 OLEDB 。特别是 ,如果熟悉C + + 中的 ATL 技术 ,那么使用 ATL 对 OLEDB 的封装会使编程容易很多 。此 外 ,查询分析器可以帮助你在调试程序时方便地建立数据库以 及查看数据库 。 参考文献 [ 1 ] http : ∥www. msdn. com. [2 ] [ 美 ]Douglas Boling 著 ,Microsoft Windows CE 程序设计 ,北京大学出版 社1 ( 上接第 18 页) 本体用合作者 Agent 表示 ,资源本体用资源 Agent 表示 ,过程本 体用活动 Agent 表示 ,产品本体用产品 Agent 表示 。虚拟企业系 统中多 Agent 调度的目的是动态地将资源分配给活动 ,以完成 活动 ,确定活动的开始结束时间和活动的成本 。多 Agent 调度 的一种较为简单的方法是基于 FIPA 合同网的调度 。合同网协 议是通过任务共享实现有效合作的高级协议 ,它主要通过招标 - 投标 - 中标的过程来完成 Agent 交互 。图 4 表示了虚拟企业 系统中活动 Agent 和资源 Agent 的基于 FIPA 合同网的调度过 程。 (1) 调度 Agent 为了完成虚拟企业目标而形成一个基本规 划 。规划是活动的列表 ,列表按活动优先级排序 。 (2) 调度 Agent 启动列表中优先级最高并且与其它正在出 去调度中的 Agent 没有资源冲突的活动 Agent 。活动 Agent 知道 执行活动需要的资源以及时间约束等各种信息 。 (3) 活动 Agent 发出资源招标书 。 图 4  活动 Agent 和资源 Agent 的调度过程 (4) 资源 Agent 评价资源调度的可行性 ,对于可行的活动 Agent 基于启发式规则为它选择一个可行的资源 Agent 。 (5) 资源 Agent 发出资源投标书 。 (6) 活动 Agent 评价投标书 ,接受或者拒绝投标书 。若投标 书被接收 ,资源承诺执行活动 ; 若投标书被拒绝 ,活动 Agent 和 资源 Agent 都将进一步修改投标书 。 (7) 重复上述的步骤 ,直到活动得到执行 。 6  结  语 虚拟企业系统的分布性 、动态性和异构性以及企业合作者 自治性的特点 ,决定了传统的方法难以完整地描述它的整个生 命周期过程 ;MAS 系统的分布性 ,自治性和社会性的特点 ,为构 建虚拟企业系统提供了一个可行的方法 。本文基于 AGORA 结 构设计了虚拟企业系统模型 ,并且提出了在 JADE 平台上构建 这个系统方案 。虚拟企业本体的建立和多 Agent 的调度问题是 虚拟企业系统构建中的重要问题 。今后 ,将在此基础上进一步 实现如何构建虚拟企业系统的本体和研究虚拟企业系统中活动 Agent 执行资源 Agent 的调度问题 。虚拟企业研究重点是在于它 的应用 ,本文的讨论可以提供一些参考价值 。 参考文献 [ 1 ] S. A. Petersen ,M. Divitini ,Using Agents to Support the Selection of Virtual Enterprise Teams ,Proceedings of Fourth International Bi2Conference Work2 shop on Agent2Oriented Information Systems AOIS22002 ,Bologne ,Italy ,July 2002. [ 2 ] S. A. Petersen ,M. Divitini ,M. Matskin ,An Agent2based Approach to Model2 ing Virtual Enterprises. In the special issue on Enterprise Modeling of Inter2 national Journal of Production Planning & Control , Taylor & Francis ,Vol . 12 ,No. 3 ,Issue Apr 2001 ,pp . 224~233. [ 3 ] N. R. Jennings , On Agent Based Software Engineering , Artificial Intelli2 gence. 117 ,277~296. [ 4 ] JADE ,[ EBΠOL ] ,http : ∥jade ,cselt . itΠ. [ 5 ] Fabio Bellifemine ,Agostino Poggi , Giovanni Rimassa ,JADE2A FIPA2com2 pliant agent framework , In Proceedings of PAAM′99 ,London ,April 1999. pp . 97~108. [ 6 ] FIPA Contract Net Interaction Protocol Specification , [ EBΠOL ] , http : ∥ www. fipa. orgΠspecsΠfipa00029ΠSC00029H. html ,1998210223. [ 7 ] R. Davis , R. G. Smith ,Negotiation as a Metaphor for Distributed Problem Solving ,Artificial Intelligence ,1983 (20) ,63~109. [ 8 ] Michael Wooldridge 著 ,石纯一等译 ,多 Agent 系统引论 [ M] ,电子工 业出版社 ,2003 年 1 [ 9 ] 黄必清等著 ,虚拟企业系统的理论与技术 [ M] ,机械工业出版社 , 2004 年 1 [10 ] 史忠植著 ,智能主体及其应用[M] ,北京 :科学出版社 ,2000 年 1

Top_arrow
回到顶部
EEWORLD下载中心所有资源均来自网友分享,如有侵权,请发送举报邮件到客服邮箱bbs_service@eeworld.com.cn 或通过站内短信息或QQ:273568022联系管理员 高进,我们会尽快处理。