C++ :sqlite3使用:


更详细的sqlite3使用和MFC应用请转到 链接

资源下载

1、下载sqlite3源码:http://www.sqlite.org/download.html

下载下图所示需要的四份所需文件(X86和X64都要下载)

在这里插入图片描述
2.文件解压:
f:盘新建sqlite文件夹并完成解压
在这里插入图片描述

3.这里需要使用到vs2017安装目录下的lib.exe和一些其他的依赖库;
直接将vs2017安装目录下的HostX64/x64文件夹拷贝(C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.16.27023\bin\Hostx64)到新文件夹(若x86则要拷贝x86对应的文件夹);
再将步骤2中的sqlite3.dll和sqlite3.def拷贝到这个新文件夹;
在这里插入图片描述
4.生成lib文件
在新文件夹中打开powershell,输入:

.\lib.exe /def:sqlite3.def /machine:X64

(如果是x86则最后的参数要换成X86)
ps:如果powershell打开路径不是lib.exe所在路径会发生如下报错
在这里插入图片描述
修改后:
在这里插入图片描述
5.生成文件
新生成文件:sqlite3.lib (75kb)
在这里插入图片描述

demo

创建数据表

1.进入到“F:\sqlite\sqlite-tools-win32-x86-3350500>”
2.开始执行创建语句如下图:
在这里插入图片描述
3.新建DEMO 添加运行文件
在该目录下找到刚刚生成的sqlite3.lib;

在sqlite-amalgamation-3180000目录下找到sqlite3.h;
在sqlite-dll-win64-x64-3180000 目录下找到sqlite3.dll;
将上述三个文件拷贝到vs2017的项目源码目录下:

参考链接1:https://blog.csdn.net/jqsad/article/details/72773264
参考链接2:https://blog.csdn.net/xionglifei2014/article/details/80665636

F:\sqlite\sqlite-tools-win32-x86-3350500>sqlite3.exe test.db
SQLite version 3.35.5 2021-04-19 18:32:05
Enter ".help" for usage hints.
sqlite> create table user
   ...> (
   ...> id integer primary key autoincrement,
   ...> name varchar(64),
   ...> age integer
   ...> );
sqlite> .quit
#include <iostream>
#include "sqlite3.h"

#pragma comment(lib, "sqlite3.lib")

using namespace std;


sqlite3 * pDB = NULL;
//增加用户  
bool AddUser(const string& sName, const string& sAge);
//删除用户  
bool DeleteUser(const string& sName);
//修改用户  
bool ModifyUser(const string& sName, const string& sAge);
//查找用户  
bool SelectUser();



int main() {
	
	int res = sqlite3_open("test.db", &pDB);

	if (res != SQLITE_OK) {
		cout << "Open database fail!" << endl;
		return 0;
	}

	else {
		cout << "Open database success" << endl;
	}
	
	AddUser("zhao", "18");

	添加“赵钱孙李”  
	//if (!AddUser("zhao", "18")
	//	|| !AddUser("qian", "19")
	//	|| !AddUser("sun", "20")
	//	|| !AddUser("li", "21"))
	//{
	//	goto QUIT;
	//}

QUIT:
	sqlite3_close(pDB);


	system("pause");
	return 0;
}

bool AddUser(const string& sName, const string& sAge)
{
	string strSql = "";
	strSql += "INSERT INTO user(name,age)";
	strSql += "values('";
	strSql += sName;
	strSql += "',";
	strSql += sAge;
	strSql += ");";

	char* cErrMsg;
	int nRes = sqlite3_exec(pDB, strSql.c_str(), 0, 0, &cErrMsg);
	if (nRes != SQLITE_OK)
	{
		cout << "add user fail: " << cErrMsg << endl;
		return false;
	}
	else
	{
		cout << "add user success: " << sName.c_str() << "\t" << sAge.c_str() << endl;
	}

	return true;
}

bool DeleteUser(const string& sName)
{
	string strSql = "";
	strSql += "delete from user where name='";
	strSql += sName;
	strSql += "';";

	char* cErrMsg;
	int nRes = sqlite3_exec(pDB, strSql.c_str(), 0, 0, &cErrMsg);
	if (nRes != SQLITE_OK)
	{
		cout << "delete user fail: " << cErrMsg << endl;
		return false;
	}
	else
	{
		cout << "delete user success: " << sName.c_str() << endl;
	}

	return true;
}

bool ModifyUser(const string& sName, const string& sAge)
{
	string strSql = "";
	strSql += "update user set age =";
	strSql += sAge;
	strSql += " where name='";
	strSql += sName;
	strSql += "';";

	char* cErrMsg;
	int nRes = sqlite3_exec(pDB, strSql.c_str(), 0, 0, &cErrMsg);
	if (nRes != SQLITE_OK)
	{
		cout << "modify user fail: " << cErrMsg << endl;
		return false;
	}
	else
	{
		cout << "modify user success: " << sName.c_str() << "\t" << sAge.c_str() << endl;
	}

	return true;
}

static int UserResult(void *NotUsed, int argc, char **argv, char **azColName)
{
	for (int i = 0; i < argc; i++)
	{
		cout << azColName[i] << " = " << (argv[i] ? argv[i] : "NULL") << ", ";
	}
	cout << endl;

	return 0;
}

bool SelectUser()
{
	char* cErrMsg;
	int res = sqlite3_exec(pDB, "select * from user;", UserResult, 0, &cErrMsg);

	if (res != SQLITE_OK)
	{
		cout << "select fail: " << cErrMsg << endl;
		return false;
	}

	return true;
}

调试

error LNK2019: 无法解析的外部符号 sqlite3_XXX,
在这里插入图片描述

裸机中安装Sqlite,exe执行程序调用

Sqlite3文件下载:
https://www.sqlite.org/download.html
1.下载 sqlite-dll-win32-x86-3140100
2.下载 sqlite-tools-win32-x86-3140100
在这里插入图片描述

安装:
先在C盘建一个文件夹 sqlite,
1.把 sqlite-dll-win32-x86-3140100 中解压出来的两个文件(sqlite3.def 和 sqlite3.dll)复制到刚才新建的目录(C:\sqlite)中
2.把 sqlite-tools-win32-x86-3140100 中解压出来的文件 sqlite3.exe 复制到C:\sqlite 目录中
3.添加系统环境变量, 在Path变量值后面添加 C:\sqlite(分号不要忘记了),如下图所示:

接下来测试一下是否安装完成
运行cmd,切换到C盘根目录 C:\sqlite,输入sqlite3,然后回车,如果安装成功的话,会显示sqlite版本号

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
SQLite3是一款轻量级的关系型数据库管理系统,它是以C语言写成的,并且提供了C语言的API接口。要在C++使用SQLite3,可以使用SQLite C/C++接口,该接口包含在SQLite3的源代码中,可以通过下载SQLite3的源码来获得。 以下是在C++使用SQLite3的基本步骤: 1. 下载SQLite3的源代码并解压缩。 2. 在C++项目中添加SQLite3的源代码文件。 3. 在需要使用SQLite3的地方包含SQLite3的头文件: ```c++ #include <sqlite3.h> ``` 4. 打开数据库连接: ```c++ sqlite3* db; int rc = sqlite3_open("database.db", &db); if(rc != SQLITE_OK) { // 连接失败 } ``` 这里的`database.db`是数据库文件的名称,如果该文件不存在,则会自动创建。 5. 执行SQL语句: ```c++ char* errmsg; int rc = sqlite3_exec(db, "CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEY, name TEXT, age INTEGER)", nullptr, nullptr, &errmsg); if(rc != SQLITE_OK) { // 执行SQL语句失败 } ``` 上面的SQL语句创建了一个名为`users`的表,该表包含三个字段:`id`、`name`和`age`。 6. 查询数据: ```c++ sqlite3_stmt* stmt; int rc = sqlite3_prepare_v2(db, "SELECT * FROM users", -1, &stmt, nullptr); if(rc != SQLITE_OK) { // 查询失败 } while(sqlite3_step(stmt) == SQLITE_ROW) { int id = sqlite3_column_int(stmt, 0); const char* name = (const char*)sqlite3_column_text(stmt, 1); int age = sqlite3_column_int(stmt, 2); // 处理查询结果 } sqlite3_finalize(stmt); ``` 上面的代码查询了`users`表中的所有数据,并逐行读取数据。`sqlite3_prepare_v2`函数用于准备SQL语句,`sqlite3_step`函数用于执行SQL语句并读取结果,`sqlite3_finalize`函数用于释放资源。 7. 关闭数据库连接: ```c++ sqlite3_close(db); ``` 关闭数据库连接会释放所有相关资源,包括打开的文件句柄、内存等。 SQLite3的API接口非常简单,使用起来也比较方便,但需要注意的是,SQLite3不支持并发访问,因此在多线程环境中使用时需要注意线程安全问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时间之里

好东西就应该拿出来大家共享

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值