Inside Symbian SQL 翻译连载 三

2.3.6 查询一条数据

RSqlStatement 对象允许返回数据到客户端。首先,SQL 语句传入到RSqlStatement::PrepareL() 函数。这个函数把SQL 语句编译成SQLite 字节码,然后就可以解释出来了(关于字节码(bytecode ),第七章会详细讨论)。准备好SQL 语句后,调用RSqlStatement::Next() 函数来解释预编译的语句。如果函数返回值是KSqlAtRow ,你已经成功执行了查询语句并回返回相应的结果。

SELECT 语句有个ORDER BY 从句(clause )用来对查询出来的数据排序。然而,标题列(title column )的索引可以加速ORDER BY 操作,这是因为索引已经包含了一个为标题列在表中排好顺序的属性,就不需要再次排序了。

    RSqlStatement 有个ColumnIndex() 函数用来识别每个列的序数即列号。如果发生错误,就会返回一个负值,所以好的体验是和User::LeaveIfError() 一起使用,或者通过其他办法处理异常。

    然后列号传入RSqlStatementColumnInt()ColumnTextL() 函数,然后分别检索当前行并以整型和描述符类型返回它们。

    最后,使用RSqlStatement::Close() 函数来关闭RSqlStatement 对象。如果它在清除站(cleanup-stack ),要使用CleanupStack::PopAndDestroy(&stmt) 函数予以清除。这样就释放了对象分配的资源,否则会在应用程序和SQLite 服务器发生内存泄露。

2.3.7 更新一条记录

接下来要在表中更新一条记录。更新操作不需要有返回值,所以我们使用RSqlDatabase::Exec() 函数。

 

2.3.8 使用列绑定和流来更新一条记录

接下来,我们要用流来把歌曲存入数据库的字段中。要实现这个目标,我们先来介绍两个新概念:

(1)    列绑定

(2)    写入流

使用RSqlParamWriteStream::BindBinaryL() 函数来绑定歌曲列,然后歌曲的二进制内容通过流来存入数据库的每条记录中。

在绑定过程中,SQL 语句的占位参数替代实际值而编译(如,stmt.PrepareL() ),在上面的例子中,Prm1 就是一个占位参数。一旦一个列被绑定了,相同的SQL 语句就可以带不同的值执行多次而不用再次编译。所有的数据类型都可以通过RsqlStatement 的函数来绑定。然而上面的例子中使用RsqlParamWriteStream:: BindBinaryL() 函数来绑定列是因为这个API 提供了额外的写入流功能。

写入流允许用户插入数据到文本或二进制列。这个例子中,RsqlParamWriteStream 是用来写入流数据到绑定列。还有一个方法是Write() 函数。

SQL 语句执行后,需要用Reset() 函数将RsqlStatement 对象重置到初始状态。这样就可以使预置的SQL 语句执行多次。

另外,还有一个更有效的API 提供写入流功能,那就是RsqlBlobWriteStream 。然而这个类在Symbian^3 以后才被支持,详细介绍这个API 请看第六章。

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值