SQLite CC++接口介绍(二)

前端之家收集整理的这篇文章主要介绍了SQLite CC++接口介绍(二)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。


sqlite CC++接口介绍(二)


1.1 核心程序和对象的典型用法

应用程序用到sqlite时,通常会在初始化阶段,调用sqlite_open()函数来创建一个数据库连接对象。强调的是,sqlite_open()函数不只是打开已存在的数据库,同时也可以创建一个新的数据库并打开它。尽管,许多应用程序只用到一个数据库连接,但并不意味着应用程序不能多次调用sqlite_open()来建立多个数据库连接对象,连接至同一个或不同的数据库。有时候,一个多线程的应用程序将为每个线程创建单独的数据库连接。同样强调地是,为连接到两个或更多的数据库,并不需要创建分开的数据库连接对象。

一个数据库连接对象使用sql命令 ATTACH,可以同时访问两个或多个数据库

许多应用程序在关闭调用sqlite_close()来销毁数据库连接对象。或比如说,一个应用程序可能在响应菜单File->Open”操作中,打开数据库连接对象,然后在响应菜单File->Close”操作中,关闭数据库连接对象。

应用程序按照如下步骤执行sql命令:

  1. 使用sqlite3_prepare()函数创建预编译语句对象。

  2. 通过调用一次或多次sqlite3_step()函数,来执行预编译语句。

  3. 在两次调用sqlite3_step()之间,通过调用sqlite3_column()来提查询的结果。

  4. 调用sqlite3_finalize()来销毁预编译语句对象。

为有效使用sqlite,上述内容每个人都应该了解。其余内容,只是辅助内容和细节。

2.0 核心程序的易用封装

接口函数sqlite3_exec()即为核心程序的一个易用封装。调用函数,即可执行上述的四个步骤。给sqlite3_exec()传递一个回调函数,使用该回调函数来处理结果集中的每一行。另一个易用封装函数sqlite3_get_table(),同样执行上述四个步骤。接口函数sqlite3_get_table()sqlite3_exec()的区别是,其将查询结果存在内存堆结构中,而不是调用回调函数

要重点意识到的是:无论是sqlite3_exec()还是sqlite3_get_table(),都不能完成核心程序的全部功能。事实上,这些封装也只不过是由核心程序组成的。

3.0 绑定变量和预编译语句的重复利用

{可参阅附录1}

在前面的讨论中,假定每条sql命令预编译一次,执行,然后销毁。然而,sqlite允许一个预编译语句对象被执行多次。使用如下函数来实现该功能

  • sqlite3_reset()

  • sqlite3_bind()

一条通过sqlite3_step(),被执行一次或多次后的预编译语句对象,可以通过调用sqlite3_reset()对其进行重置。相比创建一个新的预译语句,对预编译语句调用sqlite3_reset()进行重置,可以避免不必要的sqlite3_prepare()调用

对于很多的sql命令,运行sqlite3_prepare()对命令进行解析的时间,等于或者超过运行sqlite3_step()所需的时间。故,避免调用sqlite3_prepare()会获得一个显著地性能提高。

通常,尽管,并不需要执行一条完全一样的sql命令超过一次。更多的时候,某应用需要执行相似的命令。如,你可能需要多次执行一条插入命令,每次插入不同的值。为了适应这种灵活性,sqlite允许sql命令包含变量,该变量将在执行前绑定为相应的值。后续,这些值可以被改变,可以用新值再次执行预编译语句。

sqlite中,在任何地方包含字符串都是有效的,可以以如下形式使用通配符。

  • ?

  • ?NNN

  • :AAA

  • $AAA

  • @AAA

在上面的举例中,NNN是一个整型数值,AAA是一个标识符。变量在第一次调用sqlite3_step()前以及调用sqlite3_reset()后,其初始为无效值。应用程序可以调用接口函数sqlite3_bind()将变量赋值。对于同一个变量,每次调用sqlite3_bind(),将用新值取代旧值。

允许应用程序预先准备多个预编译的sql命令,在需要时执行相应的命令。对于未执行的预编译对象,没有任何数量上的限制。

4.0 配置sqlite

对于大部分应用来说,默认配置,sqlite能很好地工作。但有时,开发者想要对程序稍加调整,以挤出多一点的性能,或使用sqlite隐藏的特性。

sqlite3_config()接口程序用于对sqlite的配置进行全局的,进程范围内有效的更改。sqlite3_config()接口函数必须在创建任何数据库连接前调用sqlite3_config()接口函数允许程序员做类似如下操作:

  • 调整sqlite的内存分配方式,包括设置选择为高安全性、实时的嵌入式系统设计的内存分配程序,或程序默认的内存分配置程序。

  • 设置进程范围的错误日志。

  • 指定应用程序定义的页缓存。

  • 对于各种线程模型,调整互斥对象的使用,或者用程序自定义的互斥系统代替。

在进程范围配置完成以及数据库连接对象创建后,对于数据库连接对象个体,则可以调用sqlite3_limit()and sqlite3_db_config()来配置。

5.0 sqlite扩展

sqlite具有能够扩展其功能的接口函数,这些程序包括

  • sqlite3_create_collation()

  • sqlite3_create_function()

  • sqlite3_create_module()

  • sqlite3_vfs_register()

sqlite3_create_collation()接口函数用于给文本排序创建一个新的排序序列。sqlite3_create_module()接口函数用于注册一个新的虚拟表实现。sqlite3_vfs_register()接口函数创建新的VFSessqlite3_create_function()接口函数用于创建一个新的sql功能,无论标量函数或合计函数{ Aggregate functions,Scalar functionssql的基本函数类型。}典型地,用如下几个附加的接口函数来实现新sql功能

  • sqlite3_aggregate_context()

  • sqlite3_result()

  • sqlite3_user_data()

  • sqlite3_value()

sqlite的所有内置sql功能正是利用如上相同的接口函数创建的。参阅sqlite的源供码,尤其是源文件date.cfunc.c

共享库或DLLs可以作为sqlite的可加载扩展。

6.0 其它接口

本文档只涉及基础的sqlite接口。sqlite包括其它许多用于实现有用功能的接口函数,这些接口函数在此并没有讨论。sqliteC/C++ Interface Specification给出了sqlite库的全部函数列表。参阅该文档以获得sqlite接口函数全面且权威的信息。

原文链接:https://www.f2er.com/sqlite/200643.html

猜你在找的Sqlite相关文章