加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

关于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


开始编译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 = %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;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读