加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

SQLite CC++接口介绍(二)

发布时间:2020-12-12 20:04:22 所属栏目:百科 来源:网络整理
导读:?? SQLite CC++接口介绍(二) 1.1 核心程序和对象的典型用法 应用程序用到 SQLite 时,通常会在初始化阶段,调用 sqlite_open() 函数 来创建一个数据库连接对象。强调的是, sqlite_open() 函数不只是打开已存在的数据库,同时也可以创建一个新的数据库并打
??

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接口函数全面且权威的信息。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读