MAC 编译sqlcipher 以及使用

sqlcipher github下载地址:
https://github.com/sqlcipher/sqlcipher
测试demon 代码:
https://gitee.com/kamenqing/sqlite-demon

编译其实就3步:

前提条件:已经安装了openssl
1> 运行 ./configure 配置文件,命令如下
./configure --enable-tempstore=yes CFLAGS="-DSQLITE_HAS_CODEC -DSQLITE_TEMP_STORE=2" LDFLAGS="/usr/local/opt/openssl@1.1/lib/libcrypto.a" --prefix="/Users/yangsen/Desktop/sqlcipher/builddir

1>: 编译静态库的时候要是用加密的功能就必须配置这三个选项:
	--enable-tempstore=yes  
	-DSQLITE_HAS_CODEC
	-DSQLITE_TEMP_STORE=2
2>: openssl 加密库(根据自己的路径加载) 可用which  libcrypto.a 命令查找
	LDFLAGS="/usr/local/opt/openssl@1.1/lib/libcrypto.a
3>: 编译生成目录,( bin, include, lib)
	--prefix="/Users/yangsen/Desktop/sqlcipher/builddir

2>make(前提是没有报错)

	报错:
		/bin/sh: 1: tclsh: not found  要下载tcl
		

下载地址:http://www.tcl.tk/software/tcltk/download.html

3>make install (结果如下)
在这里插入图片描述
在这里插入图片描述

Qt 加载使用 sqlcipher

工程文件 需加载对应的库 和 include
最重要的一点到了:
加载sqlite3.h 文件的時候, 一定要加上这个宏
在这里插入图片描述
具体原因:不加的话 调用 sqlite3_key 会报错
在这里插入图片描述

#include <QCoreApplication>
#include"sqlcipher/sqlite3.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ERROR(X)

static int callback(void *NotUsed, int argc, char **argv, char **col_name)
{
    int i;
    for(i=0; i<argc; i++)
    {
        printf("打印结果;\n");
        printf("%s\n", argv[i] ? argv[i] : "NULL");
    }
    printf("\n");
    return 0;
}


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    sqlite3 *db;
    const char *file= "test.db";
    const char *key = "123456";//key为使用sqlcipher设置的密码
    if (sqlite3_open(file, &db) == SQLITE_OK)
    {
        int  rc;

        if(db == NULL)
        {
            ERROR(("sqlite3_open reported OK, but db is null, retrying open %s\n", sqlite3_errmsg(db)))
        }
        //验证密码是否正确
        if(sqlite3_key(db, key, strlen(key)) != SQLITE_OK)
        {
            ERROR(("error setting key %s\n", sqlite3_errmsg(db)))
            exit(-1);
        }
        //SQLlite 操作代码...
        char* sql1 = "create table if not exists test(int id,varchar name);";
        char* sql2 = "insert into test values(1,'hello');";
        char* sql3 = "select * from test;";
        char* err_msg = NULL;
        rc = sqlite3_exec(db, sql1, callback, 0, &err_msg);
        if( rc!=SQLITE_OK )
        {

            fprintf(stderr, "SQL error: %s\n", err_msg);
            sqlite3_free(err_msg);
            err_msg = NULL;
        }
        rc = sqlite3_exec(db, sql2, callback, 0, &err_msg);
        if( rc!=SQLITE_OK )
        {
            fprintf(stderr, "SQL error: %s\n", err_msg);
            sqlite3_free(err_msg);
            err_msg = NULL;
        }

        rc = sqlite3_exec(db, sql3, callback, 0, &err_msg);
        if( rc!=SQLITE_OK )
        {
            fprintf(stderr, "SQL error: %s\n", err_msg);
            sqlite3_free(err_msg);
            err_msg = NULL;
        }
        sqlite3_close(db);

    }
    return a.exec();
}

运行结果如下:
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值