微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQlite数据库的C编程接口八 工具函数Utility Functions

sqlite还有一些比较有用的工具函数,虽然对于基本的数据库任务可能不需要使用它们。

版本管理(VersionManagement

(1)

  1. constchar*sqlite3_libversion(void);

UTF-8编码字符串的形式,返回sqlite库的版本。sqlite还定义了一个宏:sqlITE_VERSION,它的值也是代表sqlite库版本的UTF-8编码字符串。

如:#define sqlITE_VERSION "3.7.10"

(2)

一个整形数的形式,返回sqlite库的版本,格式是MNNNPPPM是主版本号,对于sqlite3数据库,M的值为3。N是次版本号,P代表发行点。

宏定义sqlITE_VERSION_NUMBER,与sqlite3_libversion_number函数功能相同。

如:#define sqlITE_VERSION_NUMBER 3007010

(3)

copy
    char*sqlite3_sourceid(void);

返回一个字符串指针,指向的字符串中包含日期、时间戳和一个SHA1哈希值。宏定义sqlITE_SOURCE_ID功能与该函数相同。

如:#define sqlITE_SOURCE_ID "2012-01-16 16:56:31 93aa17d866873e11dde5ffbefe74497f229977c1"

程序员可以利用上面的几个函数和对应的宏定义来验证sqlite库的版本。宏定义来自头文件sqlite.h中,而函数调用获取的版本号来自程序所链接sqlitelibrary中。

如:

copy
    if(sqlITE_VERSION_NUMBER>sqlite3_libversion_number()){
  1. /*librarytooold;reporterrorandexit.*/
  2. }

在这段程序中,sqlITE_VERSION_NUMBER的值来自我们的客户应用程序在编译时所使用的sqlite.h文件中。而sqlite3_libversion_number()函数调用所返回的版本号,来自应用程序运行时所连接的library的版本。所以在我们的应用程序中,可以做如上代码的比较,以判断应用程序运行时,所连接的library是否比我们的应用程序编译时所使用的版本低,如果是则发出错误报告或者退出程序。

内存管理(MemoryManagement

sqlite需要动态分配一块内存时,它通常是调用底层操作系统认的内存处理函数,使sqlite从应用程序堆中分配内存。然而,程序员可以通过sqlite3_config函数配置sqlite,使其进行自己的内部的内存管理。这对于嵌入式和手持终端等内存受限的设备来说非常重要,过度分配内存会给系统稳定性带来问题。

(1)

copy
    void*sqlite3_malloc(int);

分配一块由参数指定的字节大小的buffer,返回buffer指针。如果内存分配失败,则返回NULL。所分配的内存总是8字节(64位)对齐,该函数c标准库函数malloc的替代品。

(2)

copy
    void*sqlite3_realloc(void*,int);

函数用于重新调整内存分配。第1个参数是由sqlite3_malloc函数返回的buffer指针,第2个参数是调整之后的buffer字节大小。sqlite3_realloc函数将根据其第2个参数所指定的字节大小,分配一块新的buffer。然后将第1个参数所指向的旧buffer中的内容尽可能多的copy到新的buffer中。然后释放旧buffer,并返回新buffer指针。如果新buffer分配失败,将返回NULL,并且旧的buffer不会被释放。

如果调用sqlite3_realloc函数时,给其第2个参数传递0或者负值,则该函数调用相当于调用sqlite3_free函数释放内存。

sqlite3_realloc函数c标准库函数realloc的替代品。

(3)

copy
    voidsqlite3_free(void*);

释放由sqlite3_malloc函数或者sqlite3_realloc函数分配的内存。该函数c标准库函数free的替代品。

因为sqlite3_xxx版本的内存管理函数是在sqlite内部环境中进行操作,所以使用这些函数比使用操作系统底层的内存管理函数有更好的可移植性和可靠性。

原文地址:https://www.jb51.cc/sqlite/201353.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐