沈建国 田增山
摘 要 文章阐述了Windows CE 5.0 EDB数据库的基本构建过程和常用的操作函数及结构体,在此基础上结合PDA通话记录数据库的开发实例,系统介绍了EDB数据库的创建思路和具体操作如读取记录、添加记录、删除和查询记录等,并且克服了EDB数据库查询功能不够灵活的特点,提出了一种新的查询方法—逐点查询法。
关键词 Windows CE5.0,EDB,应用,开发实例
在软件编程中,数据库始终是很重要的一个部分。通过数据库,可以非常方便的存储和检索数据,极大的提高人们的工作效率。但由于智能掌上设备的资源有限,限制了对数据库的使用。在WindowsCE5.0 操作系统中,专门提供了一套自带的数据库。该数据库具有数据结构相对简单,操作灵活的特点,在存储的数据量较小的情况下如通讯薄程序等,使用wince自带的数据库是非常合适的。
EDB(Embeded Database)作为WindowsCE5.0一种增强型的数据库,相对CEDB而言,EDB的功能更强大。它支持更多类型的存储类型,支持事务处理等。该系统最多可以支持4种排序字索引和9种字段数据类型。在EDB数据库中可以通过提供消息来通知其他进程已经修改了数据库,数据库中的记录可以根据需要具有很多的属性,只要他们没有超出数据库结构的基本限制。某个单独的属性大小不能超过CEDB_MAXPROPDATASIZE(65471),单个记录的大小不能超过(128*1024)。
在Wince5.0及其以上版本支持三个不同版本的API函数,但是由于EDB相对来说功能较为强大,所以函数使用也较复杂,其参数更多、结构更复杂,故本文以EDB为例,结合实际开发的实例,来讲解其常用的操作如:打开、关闭、查询、删除等。并且克服了EDB查询功能不足的特点,提出了一种新的查询方法逐点(OBO ,ONE_BY_ONE) 查询法。
一、EDB数据库的创建和基本操作
建立一个EDB数据库的基本思路是:首先加载数据库卷,然后在加载的数据库卷中建立数据库,数据库建立好后再打开数据库以便对数据库进行读写等操作。
1.加载数据库卷
建立数据库之前应该加载数据库卷,可以使用CeMountDBVol函数来实现,其函数定义如下: BOOL CeMountDBVol( PCEGUID pceguid, LPWSTR lpszDBVol,DWORD dwFlags);
2.创建数据库
加载数据库卷后,应该创建数据库,此时可用CeCreateDatabasEx来创建数据库,定义如下: CEOID CeCreateDatabaseEx( PCEGUID pceguid, CEDBASEINFO *lpCEDBInfo);
创建数据库成功后,应该打开数据库,此时应调用CeOpenDatabaseEx函数,定义如下: HANDLE CeOpenDatabaseEx( PCEGUID pceguid, PCEOID poid,LPWSTR lpszName, CEPROPID propid, DWORD dwFlags,CENOTIFYREQUEST *pReq);
3.对数据库进行读,写,删除的操作
在数据库建立好后,需要对数据库进行操作。如:添加记录,删除记录,修改记录,查找记录。实现以上操作的方法并不唯一,现给出一些实用的操作方法。
打开数据库后,在向数据库写入数据的时候可以调用CeWriteRecordProps函数,其定义如下: CEOID CeWriteRecordProps(HANDLE hDbase, CEOID oidRecord, WORD cPropID, CEPROPVAL *rgPropVal),当写入成功以后返回写入记录在数据库中的属性CEOID,否则返回为0 。 在读取数据库数据时,可以调用CeReadRecordPropsEx函数来实现: CEOID CeReadRecordPropsEx( HANDLE hDbase, DWORD dwFlags,LPWORD lpcPropID, CEPROPID *rgPropID, LPBYTE *lplpBuffer,LPDWORD lpcbBuffer, HANDLE hHeap); 需要注意的是读取记录的操作中将涉及到指针、结构体数组的操作,因此要格外小心。当需要删除数据库文件时,则调用CeDeleteRecord函数来实现 BOOL CeDeleteRecord(HANDLE hDatabase, CEOID oidRecord); 在读,写,删除的过程中,必须先将指针移动到目标位置,因此会用到记录的查找移动功能,这时可以调用CeSeekDatabaseEx函数来实现,其定于如下: CEOID CeSeekDatabaseEx(HANDLE hDatabase,DWORD dwSeekType, DWORD dwValue, WORD wNumVals, LPDWORD lpdwIndex); 该函数的返回值CEOID可以用来对该条记录进行相应的操作,如读、编辑等。
4.其他的一些数据库操作函数
列举数据库: CeFindFirstDatabaseEx和CeFindNextDatabase
获得数据库的信息:CeOidGetInfoEx 释放通告消息结构体:CeFreeNotification 将数据缓冲到flash上:CeFreeNotification
获得打开的数据库所使用的句柄:CeGetDBInformationByHandle
设置数据库的各种参数:CeSetDatabaseInfoEx
列举所有转载的数据库卷并返回卷名:CeEnumDBVolumes
上文只是对用到的函数进行了罗列,由于其中的API函数参数较多,没有给出具体的解释,可以参考帮助文档。下文结合实际开发,对常用的函数和功能应用进行讲解。
|