SQLite简介: SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库一样,您不需要在系统中配置。就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件。

参考文档: https://www.runoob.com/sqlite/sqlite-c-cpp.html


下载sqlite源码:
http://sqlite.org/download.html

编译安装

# ./configure --host=arm-linux prefix=/home/user/rootfs
# make
# make install

注意事项:
host=arm-linux
prefix指明安装路径
(手工安装时文件清单:)
将bin目录下的sqlite3复制至目标标bin目录下
将lib目录下的文件复制至目标文件系统的lib目录中
将lib目录下的文件复制至交叉编译器的lib目录中
将include目录下的文件复制至交叉编译器的include目录中
bin目录下的sqlite3是用于测试的文件


C语言API函数使用说明


创建数据库:

int  sqlite3_open(const char *filename,  // 数据库路径
                  sqlite3 **ppdb);       // 数据库句柄

关闭数据库:

int  sqlite3_close(sqlite3 *db);  

如果filename为NULL,则在RAM中创建数据库;
如果文件已存在则打开数据库存,不存在则创建数据库;


构建sql语句:

char *sqlite3_mprintf(const char*, va_list);  
int  sqlite3_free(char *);

例:

// 构建SQL语句
sql = sqlite3_mprintf("delete from %s where %s = %d;", val1, val2, val3);
// 添加执行语句......
sqlite3_exec(db, sql, callback, NULL, NULL); 
// 释放内存 
sqlite3_free(sql);  

说明:sqlite3_mprintft和sqlite3_free总是成对出现,否则会造成内存泄露

执行sql语句:

int  sqlite3_exec(sqlite3 *db,        // 数据库句柄
                  const char *sql,    // SQL语句
                  int (*sqlite3_callback)(void *,int, char**,char**), // 回调函数
                  void *data,                                         // 传给回调函数的参数指针
                  char **errmsg);                                     // 错误消息字符串指针

回调函数定义:

int callback_fun(void *para,         // 执行语句传入的data参数
                 int n_column,       // 字段数
                 char **column_value,// 字段内容数组 
                 char **column_name);// 字段名称数组

非回调查询:

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

void sqlite3_free_table(char **resultp);  

sqlite3_get_table必须与sqlite3_free_table成对使用