`

Symbian DBMS中的检索

阅读更多

 

DBMS方面的应用中检索是必不可少的操作,通常我们习惯使用SQL来进行检索,就像下面这样:

 

//SQL keywords definitions

_LIT(KSelect, "SELECT ");

_LIT(KDelete, "DELETE " );

_LIT(KFrom, " FROM ");

_LIT(KWhere, " WHERE ");

_LIT(KEqual, " = ");

_LIT(KNotEqual, " <> ");

_LIT(KOrderBy, " ORDER BY ");

_LIT(KDot, ", ");

_LIT(KAnd, " AND " );

_LIT(KLike, " LIKE ");

_LIT(KQuotation, "'");

_LIT( KAsterisk, "*" );

 

// Implementation specific constants

const int KCustomSqlMaxLength = 256;

/**

* Function: GetColumnDataByKeyL

*

* Description: Get a value from appointed table and column by key.

*

* Returns: KErrNone or one of the system wide error codes.

*/

TInt COurDb::GetColumnDataByKeyL( const TDesC &aTable, const TDesC &aCol, const TDesC &aSortCol,

const TDesC &aKeyCol, const TInt aKey, TDes &aVal )

{

TBuf<KCustomSqlMaxLength> sqlStr;

sqlStr.Append( KSelect );

sqlStr.Append( aCol );

sqlStr.Append( KFrom );

sqlStr.Append( aTable );

sqlStr.Append( KWhere );

sqlStr.Append( aKeyCol );

sqlStr.Append( KEqual );

sqlStr.AppendNum( aKey );

sqlStr.Append( KOrderBy );

sqlStr.Append( aSortCol );

 

// Create a view on the database

RDbView view;

TInt ret( 0 );

ret = view.Prepare( iDb, TDbQuery( sqlStr ), view.EReadOnly );

if( ret != KErrNone )

{

view.Close();

return ret;

}

User::LeaveIfError( view.EvaluateAll() );

 

CDbColSet* colSet = view.ColSetL();

CleanupStack::PushL(colSet);

 

if( view.FirstL() )

{

ret = KErrNone;

view.GetL();

aVal.Copy( view.ColDes( colSet->ColNo( aCol ) ) );

}

else

{

ret = KErrNotFound;

}

 

CleanupStack::PopAndDestroy(colSet);

view.Close();

 

return ret;

}

 

上面的方法对程序员来说是最得心应手的,但由于需要组织一长串的SQL语句所以略显冗长,其实Symbian DBMS API提供了检索的功能,可以通过RDbTable:: SeekL()进行单一和复合的查询功能,应用RDbTable:: SeekL()上面的代码就可以变成:

/**

* Function: GetColumnDataByKeyL

*

* Description: Get a value from appointed table and column by key.

*

* Returns: KErrNone or one of the system wide error codes.

*/

TInt COurDb::GetColumnDataByKeyL( const TDesC &aTable, const TDesC &aCol, const TDesC &aIndex,

const TInt aKey, TDes &aVal )

{

// Create an read-only database table object

RDbTable table;

TInt ret = table.Open( iDb, aTable, table.EReadOnly );

 

if( ret != KErrNone )

{

return ret;

}

 

CDbColSet* colSet = table.ColSetL();

CleanupStack::PushL(colSet);

 

table.SetIndex( aIndex );    //

if( table.SeekL( TDbSeekKey( aKey ) ) )

{

table.GetL();

aVal .Copy( table.ColDes( colSet->ColNo( aCol ) ) );

ret = KErrNone;

}

else

{

ret = KErrNotFound;

}

 

CleanupStack::PopAndDestroy( colSet );

table.Close();

 

return ret;

}

 

使用RDbTable:: SeekL()我们需要为数据表设置当前使用的索引,然后通过构造一个TDbSeekKey查询对象传给RDbTable:: SeekL()进行实际的检索,这么简单就完成了检索,去掉了繁杂字符串组合操作.下面接着介绍一下通过RDbTable:: SeekL()实现复合查询的方法,可能有人看过TDbSeekKey的定义后会被TDbSeekKey::Add()这个方法迷惑,认为通过它为查询对象TDbSeekKey添加键值就行了,可不幸的是我们会在运行时得到一个panic.正确的方法是使用Symbian DBMS提供的另一个查询类TDbSeekMultiKey<TInt S>,它是一个瘦模板类,构造时传入复合查询时key的个数,然后通过Add方法把每个key添加进行就可以了:

 

TDbSeekMultiKey<2> key;

key.Add( aKey1 );

key.Add( aKey2 );

table.SetIndex( aIndex );    //

if( table.SeekL( key ) )

{

table.GetL();

aVal .Copy( table.ColDes( colSet->ColNo( aCol ) ) );

ret = KErrNone;

}

else

{

ret = KErrNotFound;

}

 

有一点需要注意一下:就是在使用RDbTable:: SeekL()进行检索时,当前使用的索引必需包含每个key所在的列.

 

分享到:
评论

相关推荐

    DBMS.rar_dbms_symbian DBMS

    在IT行业中,数据库管理系统(DBMS)是至关重要的组成部分,特别是在移动设备如Symbian操作系统上。Symbian是一款曾经广泛应用于智能手机的操作系统,而针对Symbian平台的DBMS则为开发者提供了存储和管理数据的能力...

    DBMS.rar_dbms_symbian_symbian DBMS

    本文将深入探讨Symbian S60平台上DBMS的使用,以及"DBMS.rar_dbms_symbian_symbian DBMS"这个压缩包中可能包含的内容。 首先,"Symbian S60 DBMS example"指的是在Symbian S60系统上的数据库管理系统的示例应用或...

    利用DBMS与IRS实现中文全文检索得研究

    ### 利用DBMS与IRS实现中文全文检索的研究 #### 引言 在信息技术迅速发展的今天,数据库管理系统(DBMS)与信息存储检索系统(IRS)作为数据管理和检索的重要工具,各自发挥着不可或缺的作用。然而,面对海量非...

    第十五节 Sqlmap检索DBMS信息-01

    在这节课程中,我们将学习如何使用 Sqlmap 检索 DBMS 信息,包括 Banner 信息、当前用户、当前数据库和当前主机名。 资源详细信息 ### Sqlmap 检索 DBMS Banner DBMS 的 Banner 信息是指数据库管理系统的版本号...

    DBMS

    在IT行业中,DBMS扮演着至关重要的角色,它允许用户存储、检索、更新和管理数据,确保数据的安全性和一致性。 【描述】提到"My first program written by Borland C++",这表明这个DBMS项目是使用Borland C++编译器...

    DBMS_XMLDOM DBMS_XMLPARSER DBMS_XMLQUERY 文档

    Oracle数据库系统提供了强大的XML处理能力,这主要体现在其内置的几个PL/SQL包上,如DBMS_XMLDOM、DBMS_XMLPARSER和DBMS_XMLQUERY。这些包为开发者提供了处理XML文档的一整套工具,使得在数据库环境中进行XML数据的...

    DBMS_Sample

    标签中的"Symbian"表明我们将重点关注在Symbian操作系统上的DBMS应用。Symbian是一个曾经广泛应用于智能手机的操作系统,具有强大的多任务处理能力和对移动设备资源的有效管理。在Symbian平台上,开发者可以利用特定...

    DBMS_dbms_javascript_

    DBMS是用于创建、管理、存储和检索数据的软件系统。它提供了数据的结构化存储、数据安全、并发控制以及备份恢复等功能。常见的DBMS有MySQL、Oracle、SQL Server、MongoDB等。 在JavaScript中,与DBMS交互主要通过两...

    Symbian S60 DBMS

    Symbian S60 DBMS(数据库管理系统)是一套专为Symbian S60平台设计的数据库管理工具集,它允许开发者在移动设备上高效地存储、检索和管理数据。本文档将详细介绍如何使用Symbian S60 DBMS API进行数据库操作,并...

    DBMS系统架构 ppt

    数据库管理系统(DBMS)是计算机科学中的核心组成部分,它负责管理和操作数据的存储、检索、更新和删除。在本系列的PPT中,我们将深入探讨DBMS系统架构的多个关键方面,包括其基本概念、数据存储、数据表示、索引...

    自己做的简单的DBMS

    4. 查询(Select):从数据库中检索数据,是最常用的功能之一。简单的DBMS可能提供基于基本条件的查询,如"SELECT * FROM 表名 WHERE 条件",返回满足条件的所有记录。 三、数据结构与设计 在简单的DBMS中,数据...

    用C++编写的DBMS

    在IT领域,数据库管理系统(DBMS)是至关重要的软件组件,用于存储、管理和检索数据。本文将深入探讨一个使用C++编程语言实现的DBMS,这对于C++初学者或者对数据库系统感兴趣的开发者来说是一个很好的学习资源。 ...

    oracle dbms_lob

    Oracle数据库系统中,`DBMS_LOB`是一个重要的PL/SQL包,专门用于处理大型对象(LOBs,Large Object)。LOBs是Oracle提供的一种数据类型,用于存储大量数据,如文本、图像、音频或视频文件等。这个包包含了各种过程和...

    DBMS_SQL的使用

    在Oracle数据库中,`DBMS_SQL`包是一个功能强大的工具,用于执行动态SQL语句。它提供了处理动态SQL语句的能力,使得开发人员能够灵活地构建和执行SQL语句,而不需要预先定义表结构或SQL文本。`DBMS_SQL`主要通过以下...

    C++ 编写的小型DBMS

    在信息技术领域,数据库管理系统(DBMS)是用于存储、管理和检索数据的核心工具。本篇文章将深入探讨一个基于C++编程语言编写的微型DBMS,它虽小巧但具备了数据库管理的基本功能,特别适合初学者了解数据库系统的...

    DBMS_c.rar_C语言实现DBMS_DBMS_c_c语言DBMS_dbms

    数据库管理系统(DBMS)是计算机科学中的核心组成部分,它负责管理和组织数据,使得用户能够高效地存储、查询和处理信息。在这个项目中,"DBMS_c.rar" 提供了一个使用 C 语言实现的简单 DBMS 框架,名为 "DBMS_c",...

    dbms源码课程设计

    在你的“dbms源码课程设计”项目中,你似乎已经用C语言实现了DBMS的基本功能。这是一个很好的学习实践,因为C语言提供了底层控制,能够深入理解数据库的工作原理。下面我们将详细探讨DBMS的一些核心概念和实现技术。...

    dbms.rar_DBMS visual c++_dbms

    数据库管理系统(DBMS)是计算机科学中的核心组成部分,它允许用户和应用程序存储、管理、检索和更新数据。在“dbms.rar”这个压缩包中,我们看到与DBMS相关的项目,特别是结合了Visual C++这一编程环境。让我们深入...

    DBMS的设计与实现

    在IT领域,数据库管理系统(DBMS)是至关重要的软件组件,用于存储、管理和检索数据。本项目以"DBMS的设计与实现"为主题,旨在通过构建一个原型系统来理解和掌握DBMS的核心概念和技术。这个系统应该能够处理基本的...

    DBMS.rar_dbms_dbms举例_dbms有什么例子

    DBMS允许用户和应用程序通过结构化的查询语言(SQL)或其他接口来存储、检索、更新和删除数据。在本例中,"DBMS.rar"可能包含了关于如何使用DBMS进行基本操作的示例,可能是通过具体的操作步骤或代码示例来展示。 ...

Global site tag (gtag.js) - Google Analytics