概述
本文简单描述如何在mfc项目中使用sqlite3,以便备忘
下载
https://sqlite.org/download.html
创建项目
为了演示方便,这里创建了一个控制台应用程序
然后创建一个dll项目,用于sqlite3的封装
为了方便导出,这里选择mfc扩展dll,这样无需手动编写exp
将刚刚下载的sqlite中的两个文件拷贝到项目目录,并且添加进去
项目如图
改一下dll项目属性,不使用预编译头
整理项目,将不相关的所有文件删除
只需要上面这么3个文件。
增加项目预处理器
SQL_DLL
封装
由于sqlite3是c编写的,无法在dll中自动导出,所以我们封装成c++的类,之后自动导出。
新建Db.h
#pragma once
#ifdef SQL_DLL
#define SQL_DLL_API __declspec(dllexport)
#else
#define SQL_DLL_API __declspec(dllimport)
#endif
#include "sqlite3.h"
class SQL_DLL_API Db
{
public:
Db();
void open(const char* db);
void close();
const char* errmsg();
void exec(const char* sql);
sqlite3* sqlite3;
};
新建Db.cpp
#include "Db.h"
Db::Db() {
sqlite3 = NULL;
}
void Db::open(const char* db)
{
if (SQLITE_OK != sqlite3_open(db, &sqlite3)) {
throw errmsg();
}
}
const char* Db::errmsg() {
return sqlite3_errmsg(sqlite3);
}
void Db::exec(const char* sql) {
if (SQLITE_OK != sqlite3_exec(sqlite3, sql, NULL, NULL, NULL)) {
throw errmsg();
}
}
void Db::close()
{
if (SQLITE_OK != sqlite3_close(sqlite3)) {
throw errmsg();
}
}
这里先做一个初步封装
编写测试程序
设置主项目依赖
增加包含目录(include)
增加库目录(library)
增加主项目的依赖项目
在主项目中编写调用代码
int main()
{
//std::cout << "Hello World!\n";
Db db;
try {
db.open("d:\\1.db");
db.exec("create table if not exists student(id integer primary key, name text, age integer)");
char sql[1000];
sprintf_s(sql, 1000, "insert into student(id,name,age)values(%d,'%s',%d)", 1, "zhangsan", 10);
db.exec(sql);
db.close();
}
catch (const char* text) {
printf(text);
db.close();
}
}
这样,如果需要使用更多函数,则继续在封装类编写即可。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。