您的位置:首页 > 运维架构 > Linux

关于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目录为工作目录,操作命令如下:

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;
}


 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息