【已解决】vs2015下c++对sqlite的操作

本博文源于笔者操作sqlite3,借鉴了很多文章的思路,这里并整理了c++常用的对数据库的操作供大家点赞收藏以后备用。包含了:c++对sqlite3的创建数据库、创建数据表、写入数据表、读取数据表、删除数据表。也包括了最基础的让c++运行sqlite3.内容供读者参考,希望对大家有所帮助。

1、如何让c++运行sqlite3

虽然让c++运行sqlite3不是重点,但这里放个连接供大家参考。
跳转链接

2、创建数据库

cpp 复制代码
void CreateDataBase(const char* dataBaseName) {
	int result = sqlite3_open_v2(dataBaseName, &sql, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_NOMUTEX | SQLITE_OPEN_SHAREDCACHE, NULL);
	if (result == SQLITE_OK) {
		std::cout << "打开数据库连接成功" << std::endl;;
	}
	else {
		std::cout << "打开数据库连接失败" << std::endl;
	}
}

3、创建数据表

cpp 复制代码
void CreateTable(const char* tableContent) {
	sqlite3_stmt* stmt = NULL;        //stmt语句句柄
	int result = sqlite3_prepare_v2(sql, tableContent, -1, &stmt, NULL);

	if (result == SQLITE_OK) {
		std::clog << "创建数据表成功" << std::endl;
		sqlite3_step(stmt);
	}
	else {
		std::clog << "创建数据表失败" << std::endl;
	}
	sqlite3_finalize(stmt);
}

写入语句

cpp 复制代码
void InsertValue(const char* sqlContent) {
	// 表单中插入信息
	//进行插入前的准备工作------检查语句合法性
	//-1代表系统会自动计算SQL语句的长度
	sqlite3_stmt* stmt = NULL;
	int result = sqlite3_prepare_v2(sql, sqlContent, -1, &stmt, NULL);

	if (result == SQLITE_OK) {
		std::clog << "添加数据语句OK" << std::endl;
		//执行该语句
		sqlite3_step(stmt);
	}
	else {
		std::clog << "添加数据语句有问题" << std::endl;
	}
	//清理语句句柄,准备执行下一个语句
	sqlite3_finalize(stmt);
}

读取信息

cpp 复制代码
void ReadTable() {
	// 查询
	char* errmsg;
	char** mResult;//结果集
	int mRow;//行数
	int mCol;//列数
	int nResult = sqlite3_get_table(sql, "select * from devices;", &mResult, &mRow, &mCol, &errmsg);
	int nIndex = mCol;
	cout << "mRow: " << mRow << endl;
	cout << "mCol: " << mCol << endl;
	if (mRow > 0 && mCol > 0)
	{
		
		for (int i = 0; i < mRow; i++)
		{
			for (int j = 0; j < mCol; j++)
			{
				cout << mResult[j] << ": " << mResult[nIndex] << endl;
				++nIndex;
			}
			cout << endl;
		}
		sqlite3_free_table(mResult);
	}
}

删除数据表

cpp 复制代码
void DelTable(const char* sqlContent) {
	sqlite3_stmt* stmt = NULL;
	int result = sqlite3_prepare_v2(sql, sqlContent, -1, &stmt, NULL);

	if (result == SQLITE_OK) {
		std::clog << "删除数据完毕OK" << std::endl;
		sqlite3_step(stmt);
	}
	else {
		std::clog << "删除数据有问题" << std::endl;
	}
}

完整测试样例

cpp 复制代码
int main() {
	//创建数据库
	CreateDataBase();
	//创建数据表


	const char *sqlCreateTable = "CREATE TABLE IF NOT EXISTS devices ("
		"deviceid INTEGER PRIMARY KEY,"
		"devMac TEXT,"
		"devSn TEXT,"
		"keySn TEXT,"
		"matNum TEXT,"
		"openId TEXT,"
		"workNum TEXT);";
	CreateTable(sqlCreateTable);
	//插入数据
	const char *sqlInsert = "INSERT INTO devices  VALUES (1, '00:12:31:8f:a7:52','812aab3b5b57cce4','0012110909801968','','64e0886f60b2be8101031868','lc123');";
	InsertValue(sqlInsert);
	//读取数据
	ReadTable();
	//删除数据
	//const char* sqlDel = "delete from  devices where deviceid=1";
	//DelTable(sqlDel);
	//ReadTable();

	system("pause");
	return 0;
}

测试效果

相关推荐
要努力啊啊啊20 分钟前
使用 Python + SQLAlchemy 创建知识库数据库(SQLite)—— 构建本地知识库系统的基础《一》
数据库·人工智能·python·深度学习·自然语言处理·sqlite
KENYCHEN奉孝21 分钟前
Django CMS 的 Demo
数据库·sqlite
成工小白1 小时前
【C++ 】智能指针:内存管理的 “自动导航仪”
开发语言·c++·智能指针
sc写算法1 小时前
基于nlohmann/json 实现 从C++对象转换成JSON数据格式
开发语言·c++·json
SunkingYang1 小时前
C++中如何遍历map?
c++·stl·map·遍历·方法
Andrew_Xzw1 小时前
数据结构与算法(快速基础C++版)
开发语言·数据结构·c++·python·深度学习·算法
库库的里昂1 小时前
【C++从练气到飞升】03---构造函数和析构函数
开发语言·c++
momo卡1 小时前
MinGW-w64的安装详细步骤(c_c++的编译器gcc、g++的windows版,win10、win11真实可用)
c语言·c++·windows
凤年徐4 小时前
【数据结构初阶】单链表
c语言·开发语言·数据结构·c++·经验分享·笔记·链表
oioihoii4 小时前
C++11 右值引用:从入门到精通
开发语言·c++