vs2015编译wxsqlite3-4.7.5

来源:赵克立博客 分类: C/C++ 标签:SQL发布时间:2021-12-16 11:33:43最后更新:2022-04-23 16:07:18浏览:214
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。o_0。
更新时间:
2022-04-23 16:07:18
温馨提示:
学无止境,技术类文章有它的时效性,请留意文章更新时间,如发现内容有误请留言指出,防止别人"踩坑",我会及时更新文章

网上有很多编译wxsqlite3的文章,但都没标注版本是多少,好多都是过时的。下面编译过程对应

wxWidgets-3.1.5

wxsqlite3-4.7.5


下载 https://www.wxwidgets.org/downloads/

2112161639625720135490.png

安装到以下位置

2112161639625752599336.png

此时lib目录是空的,需要编译一下,打开vs2015项目文件打开编译 D:\wxWidgets-3.1.5\build\msw\wx_vc14.sln

打开后选择菜单 生成->批生成->全选->生成,把需要的库给编译出来,编译过程很慢很慢很慢30分钟左右,如果知道自己需要哪些的话,可以指定生成,时间会快很多。

成功后会在lib目录生成一些库文件,把文件夹名字vc后面加上对应vs版本的数字,vs2015对应14x, 如果不改的话路径会对不上,

2112161639629556193294.png


下载wxsqlite源码

clone https://github.com/utelle/wxsqlite3

切换到对应的源码版本,切记,使用这篇文章标注的版本,其它版本可能有变化


打开属性管理器添加依赖的wxwidgets属性表

2112161639626691989464.png

选择文件位置

2112161639626724563731.png

上面这一步是为了让wxsqlite可以找到需要的头文件和库,不需要你在vc++包含目录中再添加了


源码默认加密方式为 chacha20 navicat for sqlite中使用的是aes128 为了方便使用我这里给改成和navicat一样的了。

添加到预处理器下面定义

CODEC_TYPE=CODEC_TYPE_AES128

2112211640098331983838.png

前面的所有准备都是为了最后这一步的成功。

2112161639629635833902.png


新建一个空项目添加如下测试代码,注意里面的包含路径和引用库文件要设置成自己的,同样要跟上面一个添加属性列表

#include "wx/wxsqlite3.h"
#include "wx/wxsqlite3def.h"
#include "wx/wxsqlite3opt.h"
#include "wx/wxsqlite3_version.h"
#include <iostream>
using namespace std;
#ifdef _DEBUG
#pragma comment(lib, "../../lib/vc_x64_lib/Debug Win64/wxsqlite3d.lib")
#else
#pragma comment(lib, "../../lib/vc_x64_lib/Release Win64/wxsqlite3.lib")
#endif // _DEBUG


int main() {
	try {
	}
	catch (const wxSQLite3Exception& e)
	{
		//wxLogDebug(e.GetMessage());
	}
	const wxString dbFile = wxS("E:/work/c/TestWxsqlite3/wxsqlite3-data.db");
	//wxSQLite3Database::InitializeSQLite();
	cout << "Cipher (default) : " << (const char*)wxSQLite3Cipher::GetCipherName(wxSQLite3Cipher::GetGlobalCipherDefault()).mb_str(wxConvUTF8) << endl;
	wxSQLite3Database db;
	
	//db.Open(wxT("wxsqlite3-data.db"));
	// 使用加密方式打开
	db.Open(dbFile, wxString(wxS("123456")));
	cout << "Cipher (Db) : " << (const char*)wxSQLite3Cipher::GetCipherName(wxSQLite3Cipher::GetCipher(db)).mb_str(wxConvUTF8) << endl;
	wxSQLite3Cipher::SetCipher(db, wxSQLite3CipherType::WXSQLITE_CIPHER_AES128);
	cout << "Cipher (Db) : " << (const char*)wxSQLite3Cipher::GetCipherName(wxSQLite3Cipher::GetCipher(db)).mb_str(wxConvUTF8) << endl;
	
	// 打开后修改密码
	//if (db.IsOpen()) {
	//	db.ReKey(wxT("other_key"));
	//	db.Close();
	//}

	// 使用二进制密码
	//if (db.IsOpen()) {
	//	// 生成二进制秘钥
	//	wxChar ch[] = wxT("hello-world");
	//	wxMemoryBuffer buffer;
	//	buffer.AppendData(ch, sizeof(ch));

	//	db.ReKey(buffer);
	//	db.Close();
	//}


	if (db.IsOpen()) {
		// 删除数据库
		wxString sqlDrop = wxT(R"""(
			DROP TABLE IF EXISTS user
			)""");
		db.ExecuteUpdate(sqlDrop);
		// 创建数据库
		wxString sqlCreate = wxT(R"""(
			CREATE TABLE IF NOT EXISTS user(
			id INTEGER PRIMARY KEY AUTOINCREMENT,
			username VARCHAR(255) NOT NULL,
			age INTEGER NOT NULL,
			address VARCHAR(50))
			)""");
		db.ExecuteUpdate(sqlCreate);
		// 创建索引
		wxString sqlCreateUnique = wxT(R"""(
			CREATE UNIQUE INDEX username_unique ON user (username)
			)""");
		db.ExecuteUpdate(sqlCreateUnique);
		// 插入数据
		wxString sqlInsert = wxT(R"""(
			INSERT INTO user VALUES (null,"yan.wang",30,"Pudong");
			INSERT INTO user VALUES (null,"kan.wang",20,"Lujiazui");
			)""");
		//db.ExecuteUpdate(sqlInsert);
		// 查询数据
		wxString sqlQuery = wxT(R"""(
			SELECT * FROM user
			)""");
		auto res = db.ExecuteQuery(sqlQuery);
		while (res.NextRow())
		{
			//wxLogDebug(wxT("姓名:%s 年龄:%d 地址:%s"), \
					res.GetString(wxT("username")), \
					res.GetInt(wxT("age")), \
					res.GetString(wxT("address")));
		}
		// 修改id为2的年龄为29岁
		auto stm = db.PrepareStatement(wxT("UPDATE user SET age = 29 WHERE id = ?"));
		stm.Bind(1, 2);
		stm.ExecuteUpdate();
		// 再次查询
		stm = db.PrepareStatement(wxT("SELECT * FROM user WHERE id = ?"));
		stm.Bind(1, 2);
		res = stm.ExecuteQuery();
		while (res.NextRow())
		{
			//wxLogDebug(wxT("姓名:%s 年龄:%d 地址:%s"), \
					res.GetString(wxT("username")), \
					res.GetInt(wxT("age")), \
					res.GetString(wxT("address")));
		}

		db.Close();
	}

	system("pause");
}

最后使用navicat输入密码来连接

2112211640098711631560.png


微信号:kelicom QQ群:215861553 紧急求助须知
Win32/PHP/JS/Android/Python