文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>嵌入式数据库SQLite3相关操作---操作接口篇

嵌入式数据库SQLite3相关操作---操作接口篇

时间:2011-04-11  来源:☆&寒 烟☆

在上节中,我们介绍了有关SQLite3移植到开发板的过程,这节就大家总结了一下SQLite3提供的C语言编程接口,以供大家编程时使用方便。

首先要说明的是。sqlite3本身是提供了一些命令来操作数据库的。为了与SQL语句相区别,他们都是以小数点.开头。可以用

.help  获取相关命令

一,打开和关闭数据库

使用SQLite3接口操作数据库时都要先打开数据库,有点多余啊,哪个数据库不是呢?嘿嘿

int sqlite3_open(const char *filename, sqlite3 **ppDb);

参数即返回值意义如下:

filename:要打开的数据库的文件名

ppDb:用户返回数据库句柄

返回值:SQLITE_OK代表成功,否则为错误码

其实返回的错误码可以在SQLite3源码的sqlite3.h头文件找到,这里就不说了。需要说明的是这些错误是SQLite3编程接口共同使用的。而不是sqlite3_open函数私有。

用完了,当然要关闭:

int sqlite3_close(sqlite3 *ppDb);

二,执行SQL语句

SQLite3提供了一个一般化的编程接口,可以对以打开的数据库执行任何SQL语句。这个函数的原型如下:

int sqlite3_exec(sqlite3 *pDb, const char *sql,
                          int (*callback)(void* context, int nArg, char** azArg, char** azCol),
                          void *context, char **errmsg);

参数即返回值意义如下:

pDb:已打开的数据库的句柄

sql:字符串,内容是一条或多条sql语句

callback:回调函数

context:传递给回调函数的第一个参数,可称上下文参数

errmsg:指向一个字符串,其内容是对操作中发生的错误的文字描述

返回值:SQLITE_OK代表成功,否则为错误码

回调函数的作用是:当进行查询操作时,每查询到一条记录都会调用一次回调函数,这条记录的内容通过回调函数的参数传入。回调函数的参数既返回值的含义解释如下:

context:调用sqlite3_exec时传入的context指针。

nArg:数据的个数

azArg:字符串数组,有nArg个元素,表示每个字段的值

azCol:字符串数组,有nArg个元素,表示每个字段的名称

返回值:0表示要继续查询否则查询操作结束,对sqllite3_exe函数的调用将返回错误码SQLITE_ABORT.

即使记录中某个字段的类型为整数,它的值也是由C语言的字符串来代表中。

还有就是errmsg参数是一个字符指针变量的地址,通过它将得到一个字符串的首地址。显然,这个字符串的存储空间是在sqlite3_exec函数内动态分配得到的,因此用过后必须释放以免造成内存泄漏。鉴于外界并不知道sqlite3_exe函数内部是如何进行内存分配的。SQLite3平台专门提供了一个函数用于释放这块内存,其原型如下:

void sqlite3_free(void *p);

其中参数P指向要释放的内存。

三.查询数据库

其实呢,使用上面的sqlite3_exec函数就可以对数据库进行查询操作,但它使用回调函数作为返回结果的手段,有时不是很方便,因此SQLite3也提供了一个专门的接口进行查询操作,其函数原型如下:

sqlite3_get_table(sqlite3 *pDb, const char *sql, char ***pResult, int *nrow, int *ncolumn, char **errmsg);

其中各个参数的含义解释如下:

pDb:已打开的数据库的实例

sql:字符串,内容是一条或多条SQL语句。

pResult:一个(char **)型变量的地址,用于返回查询结果,查询结果由字符串数组代表。

nrow:结果表的行数。

ncolumn:结果的列数

errmsg:指向一个字符串,其内容是对操作中发生的错误的文字描述

这里的参数都好理解,不好理解的是pResult是查询的结果,它是一个字符串数组,因此它的首地址是(char **)地址。虽然它是一个一维的字符串数组,但要以二维的方式去理解,其中前ncolumn个字符串表示结果表的字段名,随后的ncolumn个字符串则是第一条记录的各个字段的值,依次类推。

内外一个需要说明的问题就是空间的问题,显然pResult所指向的字符串数组及各个字符串所占的空间都是在sqlite3_get_table函数内部动态分配得到的。因此需要使用后进行释放。由于它又不是一块平坦的内存,故也不能用sqlite3_free函数来释放,而必须用下面这个专用的函数:

void sqlite3_free_table(char **result);
其中,result参数就是查询得到的结果表的首地址。
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载