【转】:http://www.joymo.cn/Html/articles/release_37_004918.html
数据库技术作为一种对信息管理的高效方式,逐渐在业界占据了重要的地位,可以说目前任何类型的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; } |