近来在学习CodeBlocks和wxWidgets,网上有人说要操纵sqlite3使用wxSqlite比较好,实现了加密,于是我就按照他们的方法一步步实现,在编译wxSqlite和sqlite3的过程中虽说出现一些小插曲,但总算是都编译通过了,最让我头大的是用wxSqlite操纵sqlite3时出现一堆错误,痛苦一天之后决定放弃了(谁可以指导一下,感激不尽),还是转到我比较熟悉的CppSQLite3。但是我发现新版的CppSQLite3.2没有提供加密接口,于是我就想到将以前版本的接口函数移植到新版中来,试了一下,还可以,在此写几笔,以备查询。
一、静态编译带加密的sqlite3
1、下载sqlite-amalgamation-3071300(下载地址:http://www.sqlite.org/download.html)
2、打开CodeBlocks,新建Static library,项目标题为Sqlite3Encrypt,其他默认即可。
3、解压sqlite-amalgamation-3071300到某个位置,并将文件夹内所有的文件拷贝到Sqlite3Encrypt工程目录里。
4、下载wxsqlite3(下载地址:http://wxcode.sourceforge.net/components/wxsqlite3/),解压(我解压的位置为G:\wxSqlite3),并将G:\wxSqlite3\wxsqlite3-3.0.0\sqlite3\secure\src内的codec.c,codec.h,rijndael.c,rijndael.h,codecext.c和sqlite3secure.c拷贝到Sqlite3Encrypt工程目录里面,在Sqlite3Encrypt工程里添加sqlite3secure.c文件。
5、添加预处理:
在Sqlite3Encrypt上点击右键-属性,弹出对话框,配置如图:
点击“构建选项”,配置如图:
SQLITE_HAS_CODEC=1
CODEC_TYPE=CODEC_TYPE_AES128
SQLITE_CORE
THREADSAFE
SQLITE_SECURE_DELETE
SQLITE_SOUNDEX
SQLITE_ENABLE_COLUMN_METADATA
点击确定退出设置。
6、编译Sqlite3Encrypt,不出意外的话,就会生成libSqlite3Encrypt.a,即为带加密的sqlite静态库。编译过程中如果出现error: too few arguments to function 'sqlite3BtreeRollback'的错误,就将sqlite3BtreeRollback(pbt)更改为sqlite3BtreeRollback(pbt,SQLITE_OK)并保存、重新编译,即会消除错误。
二、为CppSQLite3.2添加加密接口(CppSQLite3.2下载地址:
http://www.codeproject.com/Articles/6343/CppSQLite-C-Wrapper-for-SQLite)
1、在CppSQLite3.h的CppSQLite3DB类中添加如下函数声明:
class CppSQLite3DB
{
public:
CppSQLite3DB();
virtual ~CppSQLite3DB();
void open(const char* szFile);
void open(const char* szFile, const char* szPass);
void rekey(const char* szPass);
void close();
………………………………
2、在CppSQLite3.cpp中添加上述函数的实现:
………………………………
void CppSQLite3DB::open(const char* szFile)
{
int nRet = sqlite3_open(szFile, &mpDB);
if (nRet != SQLITE_OK)
{
const char* szError = sqlite3_errmsg(mpDB);
throw CppSQLite3Exception(nRet, (char*)szError, DONT_DELETE_MSG);
}
setBusyTimeout(mnBusyTimeoutMs);
}
void CppSQLite3DB::open(const char* szFile,const char* szPass)
{
int nRet = sqlite3_open(szFile, &mpDB);
if (nRet != SQLITE_OK)
{
const char* szError = sqlite3_errmsg(mpDB);
throw CppSQLite3Exception(nRet, (char*)szError, DONT_DELETE_MSG);
}
if(szPass != NULL)
{
int nRet = sqlite3_key(mpDB, szPass, strlen(szPass));
if (nRet != SQLITE_OK)
{
const char* szError = sqlite3_errmsg(mpDB);
throw CppSQLite3Exception(nRet, (char*)szError, DONT_DELETE_MSG);
}
}
setBusyTimeout(mnBusyTimeoutMs);
}
void CppSQLite3DB::rekey(const char* szPass)
{
if(szPass != NULL)
{
int nRet = sqlite3_rekey(mpDB, szPass, strlen(szPass));
if (nRet != SQLITE_OK)
{
const char* szError = sqlite3_errmsg(mpDB);
throw CppSQLite3Exception(nRet, (char*)szError, DONT_DELETE_MSG);
}
}
setBusyTimeout(mnBusyTimeoutMs);
}
………………………………
三、用CppSQLite3.2操纵libSqlite3Encrypt
在下载CppSQLite3.2时,里面有CppSQLite3.2的使用实例,如:CppSQLiteDemo。
打开数据库可以用:
db.open("数据库路径+名称"); //不带加密方式打开数据库
db.open("数据库路径+名称","密码"); //带加密的方式打开
修改密码可以用:
db.rekey("密码"); //修改密码
参考:http://topic.csdn.net/u/20111030/13/e794f504-5d6a-4b5e-86e0-20977349814b.html
相关推荐
《LittleVGL在CodeBlocks模拟器中的编译与应用》 LittleVGL是一款开源的图形库,专为嵌入式设备设计,用于构建图形用户界面(GUI)。它提供了丰富的图形元素,如按钮、滑块、图表等,以及动画效果,使得在小型设备...
在这个资源中,我们将学习如何使用 CodeBlocks 在 Linux 平台下交叉编译 ARM-LINUX-GCC 程序。交叉编译是一种在不同的平台之间编译代码的技术,能让开发者在不同的硬件架构上开发和运行程序。ARM-LINUX-GCC 是一种...
在安装过程中,可以选择安装MinGW编译器以便可以直接在Code::Blocks中编译C/C++代码。 3. **卸载旧版本**:如果之前已经安装过其他版本的Code::Blocks,在安装新版本之前建议先卸载旧版本,以免出现冲突。 #### 六...
然而,在使用Codeblocks时,很多用户都遇到了编译环境出错和调试无法调试的问题。本文将详细介绍如何解决这些问题。 一、编译环境出错问题解决方案 在使用Codeblocks时,可能会出现编译环境出错的问题,这是因为...
在CodeBlocks中实现Socket通信的交叉编译,首先需要确保你有合适的交叉编译工具链,例如MinGW-w64,它可以用于构建针对不同架构的Linux程序。 具体步骤如下: 1. **设置交叉编译工具链**:在CodeBlocks中,打开...
然而,有时候在安装CodeBlocks后,用户可能会遇到无法编译程序的问题,这通常是由于缺少了必要的编译器组件——GCC(GNU Compiler Collection)导致的。 GCC是GNU项目的一部分,它包括了C、C++、Objective-C、...
Codeblocks+wxWidgets安装及编译
在使用CodeBlocks和MinGW编译这些源码时,首先需要确保安装了SQLite的开发库。然后在CodeBlocks项目中,将这些源文件加入到工程,并配置好编译器选项。编译完成后,生成的动态库文件(.dll)可以链接到需要使用...
在本教程中,我们将学习如何使用CodeBlocks编译VTK。VTK(The Visualization Toolkit)是一款开源的数据可视化工具包,广泛应用于科学计算、数据分析和可视化领域。CodeBlocks是一款自由开源的集成开发环境(IDE),...
3. 配置 Codeblocks:在 Codeblocks 中,选择“设置”->“编译器和调试器”,然后选择“gnu gcc 编译器”,并将 Opencv 的安装目录添加到“包含目录”中。 二、创建动态链接库工程 在配置了 Opencv 环境后,我们...
在CodeBlocks中,可以创建一个新的Qt项目,选择“Empty Project”模板,然后添加所需的源代码和资源文件。 QRC文件通常以`.qrc`为扩展名,它定义了一个XML格式的树状结构,用于组织项目中的资源。例如: ```xml ...
### 使用CodeBlocks编译新版x264 #### 背景介绍 X264是一款高质量、高性能的H.264/MPEG-4 AVC编码器,广泛应用于视频流媒体传输、视频会议以及视频存储等领域。对于开发人员来说,能够熟练地编译并使用x264是非常...
Codeblocks是一个开源的集成开发环境(IDE),用于编写、编译和调试各种编程语言的程序。它是一个跨平台的开发工具,支持多种操作系统,包括Windows、Mac OS和Linux。Codeblocks为程序员提供了一种方便、易于使用的...
其次,需要下载api头文件sqlite3.h,并将其添加到库文件中,添加到CodeBlocks\MinGW\include目录下。 新建数据库和表是使用C++操作sqlite数据库的基本步骤之一。首先,需要创建一个名为student.db的数据库,然后...
1. 找到CodeBlocks的安装目录,通常在Windows系统中位于"C:\Program Files\CodeBlocks"。 2. 进入"share\codeblocks\locale"目录,这里存放着CodeBlocks的各种语言文件。 3. 备份原有的英文语言文件,通常名为...
在CodeBlocks 17.12中集成MinGW意味着用户可以直接在IDE内部编译和运行程序,无需单独下载和配置编译器。这极大地简化了初学者的学习过程,同时也为专业开发者提供了一站式的开发解决方案。 在使用CodeBlocks 17.12...
本指南将详细介绍如何利用MinGW(Minimalist GNU for Windows)和Code::Blocks集成开发环境(IDE)在Windows上编译和使用wxWidgets库。 ### 1. wxWidgets简介 **1.1 wxWidgets版本** wxWidgets库有多个版本,每个...