关于sqlite3在linux系统的应用
2013-12-12 21:46
393 查看
本文由博主原创,转载请注明出处(保留此处和链接):
IT人生(http://blog.csdn.net/robinblog/article/details/17289157)
一次偶然的机会,用到了sqlite3开源数据库。当时要自己重新编译,获取源码过程有点纠结,现在在此做个记录,以备后用,也希望能帮助大家。
第一步:源码获取
链接一: sqlite3官网获取
链接二:Robin下載
在官网上选择 Source Code——>sqlite-amalgamation-3080002.zip(后面的数字会因版本更新有所不同)
如果官网下载慢,可以直接在Robin的CSDN下载获取。
第二步:目录构建:
这里假设home目录为工作目录,操作命令如下:
解压后,我们会获得如下文件:
开始编译libsqlite3.so 库,
开始编译sqlite3的shell命令,在命令行中会启动sqlite3的操作终端
到此为止,我们会得到如下几个文件:
经过上面操作,sqlite3数据库构建成功了,在此分享一个数据库访问的case吧:
IT人生(http://blog.csdn.net/robinblog/article/details/17289157)
一次偶然的机会,用到了sqlite3开源数据库。当时要自己重新编译,获取源码过程有点纠结,现在在此做个记录,以备后用,也希望能帮助大家。
第一步:源码获取
链接一: sqlite3官网获取
链接二:Robin下載
在官网上选择 Source Code——>sqlite-amalgamation-3080002.zip(后面的数字会因版本更新有所不同)
如果官网下载慢,可以直接在Robin的CSDN下载获取。
第二步:目录构建:
这里假设home目录为工作目录,操作命令如下:
mkdir sqlite3
mv sqlite-amalgamation-3080002.zip sqlite3/
unzip sqlite-amalgamation-3080002.zip
解压后,我们会获得如下文件:
shell.c sqlite3.c sqlite3ext.h sqlite3.h
开始编译libsqlite3.so 库,
gcc sqlite3.c -shared -o libsqlite3.so -ldl -lpthread
开始编译sqlite3的shell命令,在命令行中会启动sqlite3的操作终端
gcc shell.c -L./ -lsqlite3 -o shell
到此为止,我们会得到如下几个文件:
libsqlite3.so Readme shell shell.c sqlite3.c sqlite3ext.h sqlite3.h
经过上面操作,sqlite3数据库构建成功了,在此分享一个数据库访问的case吧:
#include "sqlite3.h" #include <stdlib.h> #include <stdbool.h> #include <stdio.h> #include <string.h> int getCallCountCallback(void *para, int columnNum, char ** columnValue, char **columnName); bool getFuncCallCountByaddr(sqlite3 *sqlH, char* funcAddr, char** callCount); bool insertFuncCallCountByaddr(sqlite3 *sqlH, char * funcAddr, char* callCount); #define SQLSTRSIZE 1024 #define SQLITE_OK 0 void main(void){ char* funcAddr = "0x09882"; sqlite3 *sqlH = NULL; char* pathLib = "./testB.db"; sqlite3 *sqlHA = NULL; char* pathLibA = "./testA.db"; char* callCount = malloc(1024); if(SQLITE_OK == sqlite3_open(pathLib, &sqlH)) { getFuncCallCountByaddr(sqlH, funcAddr, &callCount); sqlite3_close(sqlH); }else{ printf("open failure!!!\n"); } printf("callCount = %s\n", callCount); if(SQLITE_OK == sqlite3_open(pathLibA, &sqlHA)) { insertFuncCallCountByaddr(sqlHA, funcAddr, callCount); sqlite3_close(sqlHA); }else{ printf("open failure!!!\n"); } free(callCount); } bool getFuncCallCountByaddr(sqlite3 *sqlH, char * funcAddr, char** callCount){ bool ret = false; char ** errmsg; char *outArgs = malloc(1024); char sqlStr[SQLSTRSIZE] = {0}; snprintf(sqlStr, SQLSTRSIZE, "SELECT callNum from ppa_infor where funcAddr='%s'", funcAddr); int rc=sqlite3_exec(sqlH, sqlStr, getCallCountCallback, outArgs, errmsg); if(rc != SQLITE_OK) { printf("%d\n", rc); } //callCount = outArgs; printf("outArgs = %s\n", outArgs); strcpy(*callCount, outArgs); ret = true; free(outArgs); return ret; } int getCallCountCallback(void *para, int columnNum, char ** columnValue, char **columnName){ printf("%s\t%s\n", columnName[0], columnValue[0]); strcpy((char*)(para), columnValue[0]); printf("para=%s\n", (char*)para); return 0; } bool insertFuncCallCountByaddr(sqlite3 *sqlH, char * funcAddr, char* callCount){ bool ret = false; char ** errmsg; char sqlStr[SQLSTRSIZE] = {0}; snprintf(sqlStr, SQLSTRSIZE, "update perf_infor set callNum=%s where funcAddr='%s'", callCount, funcAddr); int rc=sqlite3_exec(sqlH, sqlStr, NULL, NULL, errmsg); if(rc != SQLITE_OK) { printf("%d\n", rc); } ret = true; return ret; }
相关文章推荐
- Sqlite 数据库在基于 Linux 的 Media NAS 系统中的应用
- Linux应用环境实战13:我该如何备份系统
- 关于linux系统网络监控的命令
- 关于Linux系统清理/tmp/文件夹的原理
- 一道关于Linux系统下fork系统调用的面试题
- Linux系统的救援模式应用详解
- 回复CSDN 网友关于wince,wp8,linux,android系统关哪个系统更适合做工控的疑问(红色字体是我回到的)
- 嵌入式Linux系统设计--第七章:嵌入式Linux接口与应用开发
- android 关于将应用添加到系统的 分享.. 或者 发送到.. 中
- 关于Android电池管理系统(一)Linux驱动部分
- 关于Linux文件和文件系统的讲解[mark]
- 关于linux系统如何实现fork的研究(一)
- 关于intptr_t,64位linux系统中void *与int转换
- 关于linux系统如何实现fork的研究(一)
- 关于学生管理系统的简单操作(数据库应用)
- Linux下Nginx服务器配置Modsecurity实现Web应用防护系统
- NFS 网络文件系统搭建及arm-linux交叉编译的应用
- 关于linux下安装oracle之后,重启系统后oracle失败的问题[转]
- LINUX系统中关于wunderbar_emporium.sh脚本系统漏洞的问题.