首页 > 技术文章 > 嵌入式开发 > BREW > 数据库技术在BREW中的应用

数据库技术在BREW中的应用

52RD.com 2005年6月3日 sunwhite            评论:0条 我来说两句

数据库技术作为一种对信息管理的高效方式,逐渐在业界占据了重要的地位,可以说目前任何类型的IT产品,都或多或少的采用了数据库技术,数据库产品无所不入。

BREW作为无线开发环境也提供了数据库技术。那么下面我就对数据库技术作一下分析:

BREW数据库是一种简单的关系型数据库,无多任务,无多用户,多记录。它提供给开发者三个接口:IDBMgr,IDatabase,IDBRecord。

IDBMgr接口用于创建、打开、和删除数据库。IDatabase接口用户创建和访问数据库中的记录。IDBRecord接口用户访问、更新数据库记录中的域。

下面是一些常用的数据库操作:

1、创建新数据库
代码:
IDBMgr *    pIDBMgr = NULL;
IDatabase * pIDatabase = NULL;
boolean     bCreate = TRUE;

ISHELL_CreateInstance(pIShell, AEECLSID_DBMGR, (void **)&pIDBMgr);
if (pIDBMgr == NULL)
 return;

if ((pIDatabase = IDBMGR_OpenDatabase (pIDBMgr, pszFile, bCreate)) == NULL)
{
 // Opened an already existing database.
}
else
{
 // Create an database.
}


2、打开数据库
代码:
IDBMgr *    pIDBMgr = NULL;
IDatabase * pIDatabase = NULL;
boolean     bCreate = FALSE;

ISHELL_CreateInstance(pIShell, AEECLSID_DBMGR, (void **)&(*pIDBMgr));
if (pIDBMgr == NULL)
 return;

if (((*pIDatabase) = IDBMGR_OpenDatabase ((*pIDBMgr), pszFile, bCreate)) == NULL)
{
 // Opened an already existing database.
}
else
{
 // Opened an database.
}


3、关闭数据库
代码:
// IDATABASE_Release closes the open database files, and frees 
// any memory associated with the database. 
if (pIDatabase)
{
 IDATABASE_Release (pIDatabase);
}

// Release IDBMgr object. This step needs to be done
// only if no further use of the IDBMgr object is needed.
if (pIDBMgr)
{
 IDBMGR_Release (pIDBMgr);
}


4、创建一条记录
代码:
boolean CreateOneRecord(IDatabase * pIDatabase, AEEDBField * dbField, int nNumfields)
{
 IDBRecord * pIDBRecord = NULL;
            
 // IDATABASE_CreateRecord: creates a new database record with the fields 
 // specified by pDBFields.
 if ((pIDBRecord = IDATABASE_CreateRecord (pIDatabase, dbField, nNumfields)) != NULL)
 {
  // Successfully created a database record.

  // Release record
  IDBRECORD_Release (pIDBRecord);

  return TRUE;
 }
 else
 {

  //Create DB Record Failed
 }

 return FALSE;
}

dbField指向数据库记录域,nNumfields是域的个数。可以创建一个这样的记录:
代码:
{
 AEEDBField dbField[3];
 int nNumfields = 3;
 const char firstName [] = "John";
 const char lastName  [] =  "Smith";
 const char address   [] = "123 First Street, USA";
 AEEDBFieldType fieldType;
 AEEDBFieldName fieldName;

 // Data fill values used to create a database record. 
 // The parameter dbField is a three item array of type 
 // AEEDBField. Each array item corresponds to three fields 
 // of the record. 
 dbField[0].fName = AEEDBFIELD_FIRSTNAME;
 dbField[0].fType = AEEDB_FT_STRING;
 dbField[0].pBuffer = (void *)firstName;
 dbField[0].wDataLen = STRLEN (firstName);

 dbField[1].fName = AEEDBFIELD_LASTNAME;
 dbField[1].fType = AEEDB_FT_STRING;
 dbField[1].pBuffer = (void *)lastName;
 dbField[1].wDataLen = STRLEN (lastName);

 dbField[2].fName = AEEDBFIELD_ADDRESS;
 dbField[2].fType = AEEDB_FT_STRING;
 dbField[2].pBuffer = (void *)address;
 dbField[2].wDataLen = STRLEN (address);
 
 return CreateOneRecord(pIDatabase, dbField, 3);
}


5、获取记录个数
代码:
uint32 GetRecordCount(IDatabase * pIDatabase)
{
 // IDATABASE_GetRecordCount: returns the number of records in the 
 // database specified. This gives the number of records in the
 // database prior to creating any records in the database.
 return IDATABASE_GetRecordCount (pIDatabase);
}


6、读取记录域
代码:
boolean GetRecordByID(IDatabase * pIDatabase, uint16 u16RecID)
{
 IDBRecord * pIDBRec1 = NULL;
 AEEDBFieldType fType;
 AEEDBFieldName fName;
 uint16 fLen;
 byte * data = NULL;;

 // This will reset the record Index to 0.
 IDATABASE_Reset (pIDatabase);

 // IDATABASE_GetRecordByID: returns a pointer to the record whose 
 // record ID is specified.
 pIDBRec1 = IDATABASE_GetRecordByID (pIDatabase, u16RecID);

 // Get the raw data of the field
 for(;;)
 {
  // Get record 1 first field and display it
  fType = IDBRECORD_NextField (pIDBRec1, &fName, &fLen);

  data = IDBRECORD_GetField (pIDBRec1, &fName, &fType, &fLen);
  if (data != NULL)
  {
   switch(fName)
   {
   case AEEDBFIELD_FIRSTNAME;
    break;
   case AEEDBFIELD_LASTNAME;
    break;
   case AEEDBFIELD_ADDRESS;
    break;
   default:
    break;
   }
  }
  else
  {
   break; //break for
  }
 }

 // Now remove record 1.
 IDBRECORD_Release(pIDBRec1);
 return TRUE;
}

(52RD.com)

读取...
顶一下
 更多BREW资源 到BREW论坛讨论
·热门文章 HOT
·手机充电器电路原理图及充电器的安全...
·功率MOSFET(Power MOSFET)的基本知识
·手机充电器电路原理图
·RGB ,YUV, YCbCr的定义
·功率放大器设计的关键:输出匹配电路...
·阻抗匹配与史密斯(Smith)圆图: 基本...
·SD和MMC记忆卡介面技术
·uClinux下Nor Flash的JFFS2文件系统...
·新手必读:关于Linux,你所不了解的...
·手机结构总揽
·Windows Mobile 5.0 模拟器
·手机结构设计经验总结
·移动终端天线设计技巧
·EMI / EMC设计(一)被动元件的隐藏...
·手机结构设计指南之总体设计
·手机结构设计的一般准则
·手机锂离子电池保护电路原理分析
·手机中的连接器设计(二) SIM卡连接器
·智能手机:下一代嵌入式系统的界面
·使用ADS1.2进行嵌入式软件开发(上)
·精彩评论 HOT
·赞助商链接 SUPPORT
·相关文章 CORRELATION
·Startup brews ’perfect storm’ for R&D(英)[7-19]
·联通BREW引入MSN高调升级 低价营销策略已定[12-20]
·BREW和J2ME的来源[12-18]
·BREW:3G移动增值服务的黎明[12-10]
·高通BREW解决方案将采用Aplix Java技术标准[11-7]
·特别推荐 RECOMMEND
·评  论 COMMENT
推荐朋友 打印本页