首 页 | 新 闻 | Symbian | Android| Windows Mobile | J2ME | 下载中心 | 游戏策划招聘与求职 | 购书指南 | 视频教程
您现在的位置: 开发视界 >> Symbian >> Symbian开发 >> 正文
S60平台:使用DBMS APIs —DBMS的管理结构和元素(4)
作者:Leo 译    文章来源:本站原创    更新时间:2006-8-20 22:39:15

2.6  创建数据
一旦数据库打开,就可以在数据库中保存数据。需要指出的是,无需为添加和取回数据定义索引。
下列代码段展示了表方法(参见3.1.2节,“表行集”)是如何向2.3节创建的表,“用数据库定义表”中插入数据的。本例中假定数据库是开启的。
...
_LIT(KBooksTable, "Books");
_LIT(KBooksAuthorCol, "Author");
_LIT(KBooksTitleCol, "Title");
_LIT(KBooksDescriptionCol, "Description");
...
private: //数据成员
RDbStoreDatabase iBookDb;
...  
void CBookDb::AddBookWithCppApiL(const TDesC& aAuthor,
const TDesC& aTitle,
const TDesC& aDescription)
{
// 创建一个更新表数据库对象,假定数据库开启.
RDbTable table;
User::LeaveIfError(table.Open(iBookDb,
KBooksTable, table.EUpdatable));
CleanupClosePushL(table); // 记忆弹出与关闭
//建立 CdbColSet,使用其查询列成员
CDbColSet* booksColSet = table.ColSetL();
CleanupStack::PushL(booksColSet);
table.Reset();
table.InsertL(); // 插入空行
//为每一行设定作者与名称
table.SetColL(booksColSet->ColNo(KBooksAuthorCol), aAuthor);
table.SetColL(booksColSet->ColNo(KBooksTitleCol), aTitle);
//设定说明。使用长列流
RDbColWriteStream writeStream;
writeStream.OpenLC(table,
booksColSet->ColNo(KBooksDescriptionCol));
writeStream.WriteL(aDescription);
writeStream.Close();
CleanupStack::Pop(); // 写流
CleanupStack::PopAndDestroy(booksColSet);
table.PutL(); // 完成插入
CleanupStack::Pop() // 表
table.Close();
}
Books表首先以更细模式打开。booksColSet在寻找列成员——作者列,名称列,说明列时初始化。

为数据库添加一个新行包括:首先插入一个空行,更新行值,最后完成对数据库的插入。table.SetCol(…)设定了作者与名称。说明列比较长,需要使用RDbColWriteStream。像获得更多长文本列的信息,可以参考2.6.1节,“数据库中的长列数据”。其创建工作由PutL()完成。最后,表被关闭。

2.6.1 数据库中的长列数据
通过使用RDbColReadStream,可以获取带有一个EDbColLongText DBMS列的文本数据;相似地,RDbCoWriteStream被用来为行集设定其列类型的内容。
对流式读取来说,Symbian系统的DBMS在同一时刻仅支持行集内的一个列。当流打开时,在同一个行集对象中不能使用RDbColWriteStream来定义列。
...
_LIT(KBooksTable, "Books");
_LIT(KBooksDescriptionCol, "Description");
...
private: //数据成员
RDbStoreDatabase iBookDb;
...
TBuf<128> description; // 读结果并放置于此
RDbTable table;
User::LeaveIfError(
table.Open(iBookDb, KBooksTable, table.EReadOnly));
table.Reset();
// 找到“说明”列的列数量
CDbColSet* colSet = table.ColSetL();
TDbColNo descrColNo = colSet->ColNo(KBooksDescriptionCol);
delete colSet;
table.FirstL(); // 为第一行设定游标,检查是否成功
table.GetL(); // 获取第一行的操作
// 读所有的字母,确定没有128个字母的
RDbColReadStream readStream;
readStream.OpenLC(table, descrColNo);
readStream.ReadL(description, table.ColLength(descrColNo));
readStream.Close();
CleanupStack::Pop(); //读流
CleanupStack::PopAndDestroy(colSet);
table.Close();
...
长列数据通常使用RDbColWriteStream来添加或更新。(完整的插入长列数据代码可从2.6小节,“创建数据”获得)。
RDbTable table;
// Open table in updatable mode
User::LeaveIfError(
table.Open(iBookDb, KBooksTable, table.EUpdatable);
CDbColSet* booksColSet = table.ColSetL();
CleanupStack::PushL(booksColSet);
... // Find or create a row here and retrieve it for operation
// Use a stream to read data from the long column
RDbColWriteStream writeStream;
writeStream.OpenLC(table,
booksColSet->ColNo(KBooksDescriptionCol));
writeStream.WriteL(aDescription);
writeStream.Close();
CleanupStack::Pop(); // writeStream
...
CleanupStack::PopAndDestroy(booksColSet);
table.Close();

此文为开发视界翻译转载者请注明出处否则追究法律责任

相关文章:
Symbian DBMS中的检索
对C++中的文件进行读写操作
OPL 速成教程(一)
S60平台: 使用DBMS APIs —在DBMS中使用SQL语言(3)
S60平台: 使用DBMS APIs —使用行集和游标(2)
S60平台: 使用DBMS APIs —DBMS的管理结构和元素(3)
蓝牙源代码
C++ Builder 初学问与答(5)
 

站点地图 | 加入收藏 | 联系站长 | 广告服务 |
QQ:280529124  Tel:0592-8271361 辽ICP备05021703号