关于sqlite3在linux系统的应用
发布时间:2020-12-12 20:09:04 所属栏目:百科 来源:网络整理
导读:本文由博主原创,转载请注明出处(保留此处和链接): IT人生(http://www.jb51.cc/article/p-ghleqsot-baw.html ) 一次偶然的机会,用到了sqlite3开源数据库。当时要自己重新编译,获取源码过程有点纠结,现在在此做个记录,以备后用,也希望能帮助大家。
本文由博主原创,转载请注明出处(保留此处和链接): IT人生(http://www.52php.cn/article/p-ghleqsot-baw.html)
一次偶然的机会,用到了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
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
#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 = %sn",callCount); if(SQLITE_OK == sqlite3_open(pathLibA,&sqlHA)) { insertFuncCallCountByaddr(sqlHA,callCount); sqlite3_close(sqlHA); }else{ printf("open failure!!!n"); } free(callCount); } bool getFuncCallCountByaddr(sqlite3 *sqlH,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("%dn",rc); } //callCount = outArgs; printf("outArgs = %sn",outArgs); strcpy(*callCount,outArgs); ret = true; free(outArgs); return ret; } int getCallCountCallback(void *para,char **columnName){ printf("%st%sn",columnName[0],columnValue[0]); strcpy((char*)(para),columnValue[0]); printf("para=%sn",(char*)para); return 0; } bool insertFuncCallCountByaddr(sqlite3 *sqlH,char* callCount){ bool ret = false; char ** errmsg; char sqlStr[SQLSTRSIZE] = {0}; snprintf(sqlStr,"update perf_infor set callNum=%s where funcAddr='%s'",callCount,NULL,rc); } ret = true; return ret; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |