打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
S60平台:使用DBMS APIs —DBMS的管理结构和元素(4)
S60平台:使用DBMS APIs —DBMS的管理结构和元素(4) 
 
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();
 
 
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
取表字段
如何将Oracle表里的数据导出成insert into脚本?
什么是DBMS?
11g exp不能导出空表
hash join的基本机制
史上最强的FQA for ORACLE(备份与恢复部分)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服