sqlite CC++接口介绍(二)
1.1 核心程序和对象的典型用法
@H_403_27@应用程序用到sqlite时,通常会在初始化阶段,调用sqlite_open()函数来创建一个数据库连接对象。强调的是,sqlite_open()函数不只是打开已存在的数据库,同时也可以创建一个新的数据库并打开它。尽管,许多应用程序只用到一个数据库连接,但并不意味着应用程序不能多次调用sqlite_open()来建立多个数据库连接对象,连接至同一个或不同的数据库。有时候,一个多线程的应用程序将为每个线程创建单独的数据库连接。同样强调地是,为连接到两个或更多的数据库,并不需要创建分开的数据库连接对象。 @H_403_27@一个数据库连接对象使用sql命令 ATTACH,可以同时访问两个或多个数据库。 @H_403_27@许多应用程序在关闭时调用sqlite_close()来销毁数据库连接对象。或比如说,一个应用程序可能在响应菜单“File->Open”操作中,打开数据库连接对象,然后在响应菜单“File->Close”操作中,关闭数据库连接对象。 @H_403_27@应用程序按照如下步骤执行sql命令: @H_403_27@为有效使用sqlite,上述内容每个人都应该了解。其余内容,只是辅助内容和细节。2.0 核心程序的易用封装
@H_403_27@接口函数sqlite3_exec()即为核心程序的一个易用封装。调用该函数,即可执行上述的四个步骤。给sqlite3_exec()传递一个回调函数,使用该回调函数来处理结果集中的每一行。另一个易用封装函数为sqlite3_get_table(),同样执行上述四个步骤。接口函数sqlite3_get_table()与sqlite3_exec()的区别是,其将查询结果存在内存堆结构中,而不是调用回调函数。 @H_403_27@要重点意识到的是:无论是sqlite3_exec()还是sqlite3_get_table(),都不能完成核心程序的全部功能。事实上,这些封装也只不过是由核心程序组成的。3.0 绑定变量和预编译语句的重复利用
@H_403_27@{可参阅附录1} @H_403_27@在前面的讨论中,假定每条sql命令预编译一次,执行,然后销毁。然而,sqlite允许一个预编译语句对象被执行多次。使用如下函数来实现该功能: @H_403_27@一条通过sqlite3_step(),被执行一次或多次后的预编译语句对象,可以通过调用sqlite3_reset()对其进行重置。相比创建一个新的预译语句,对预编译语句调用sqlite3_reset()进行重置,可以避免不必要的sqlite3_prepare()调用。 @H_403_27@对于很多的sql命令,运行sqlite3_prepare()对命令进行解析的时间,等于或者超过运行sqlite3_step()所需的时间。故,避免调用sqlite3_prepare()会获得一个显著地性能提高。 @H_403_27@通常,尽管,并不需要执行一条完全一样的sql命令超过一次。更多的时候,某应用需要执行相似的命令。如,你可能需要多次执行一条插入命令,每次插入不同的值。为了适应这种灵活性,sqlite允许sql命令包含变量,该变量将在执行前绑定为相应的值。后续,这些值可以被改变,可以用新值再次执行预编译语句。 @H_403_27@在sqlite中,在任何地方包含字符串都是有效的,可以以如下形式使用通配符。- ?
- ?NNN
- :AAA
- $AAA
- @AAA
4.0 配置sqlite
@H_403_27@对于大部分应用来说,默认配置,sqlite就能很好地工作。但有时,开发者想要对程序稍加调整,以挤出多一点的性能,或使用sqlite隐藏的特性。 @H_403_27@sqlite3_config()接口程序用于对sqlite的配置进行全局的,进程范围内有效的更改。sqlite3_config()接口函数必须在创建任何数据库连接前调用。sqlite3_config()接口函数允许程序员做类似如下操作:- 调整sqlite的内存分配方式,包括设置选择为高安全性、实时的嵌入式系统设计的内存分配程序,或程序默认的内存分配置程序。
- 设置进程范围的错误日志。
- 指定应用程序定义的页缓存。
- 对于各种线程模型,调整互斥对象的使用,或者用程序自定义的互斥系统代替。