一.使用流程
要使用sqlite,需要从sqlite官网下载到三个文件,分别为sqlite3.lib,sqlite3.dll,sqlite3.h,然后再在自己的工程中配置好头文件和库文件,同时将dll文件放到当前目录下,就完成配置可以使用sqlite了。
使用的过程根据使用的函数大致分为如下几个过程:
//预编译方法:
// 创建数据库对象
sqlite3_open()
// 创建预编译对象 占位符只能是数据,不参是数据段名
sqlite3_prepare()
while(1)
{
//绑定
sqlite3_bind_int(); //绑定从1开始
while(SQLITE_ROW == sqlite3_step())
{
char *p= sqlite3_column_text()
输入p
}
sqlite3_reset();
}
//
sqlite3_finalize()
sqlite3_close()
SQLite3利用函数sqlite3_column_blob来返回blob字段的内容的指针,并通过sqlite3_column_bytes来返回对应该字段的长度。
只是一直有一个疑问就是通过sqlite3_column_blob返回的二进制blob内容的内存是谁来释放,是由SQLite内部还是用调用者来释放。
后来仔细观察了内存变化发现,
sqlite3_column_blob函数会预先分配一块内存,
每次调用sqlite3_step然后sqlite3_column_blob字段内容的时候,都会在这一个指定的空间内写入,
所以调用者不必去管理者块内存,也因此,每次sqlite3_column_blob返回的二进制内容都需重新写去到调用者需要的地方去,否则下次再有二进制读出的时候,原来的内容就会被释放掉。
sqlite3_bind_*系列函数有好多,这里只对sqlite3_bind_text进行一下说明,
sqlite3_bind_text的第二个参数为序号(从1开始),
第三个参数为字符串值,
第四个参数为字符串长度。
sqlite3_bind_text的第五个参数为一个函数指针,
SQLITE3执行完操作后回调此函数,通常用于释放字符串占用的内存。(这个函数指针参数具体怎么使用,我现在还不清楚)。此参数有两个常数,SQLITE_STATIC告诉sqlite3_bind_text函数字符串为常量,可以放心使用;
而SQLITE_TRANSIENT会使得sqlite3_bind_text函数对字符串做一份拷贝。
一般使用这两个常量参数来调用sqlite3_bind_text。
sqlite3_exec() 与sqlite3_step()区别:
sqlite3_exec() 就是把你提到的三个函数结合在了一起:sqlite3_step(), sqlite3_perpare(), sqlite3_finalize()。
然后提供一个回调函数进行结果的处理。