mfc对SQLite3的操作

配置环境

SQLite官网
SQLite下载
SQLite 菜鸟教程
SQLiteStudio:可视化工具

配置文件

  • sqlite-amalgamation-*.zip: SQLite3源码
  • sqlite-dll-win64-x64-*.zip: SQLite3编译动态库

生成lib文件

操作参考

引入头文件

#include "sqlite3.h"

数据库的操作

初始化数据库

void CDialogTest::sqlite3_DataBaseInit()
{
	// 创建一个 SQLite 数据库对象
	sqlite3* db = nullptr;

	int rc = sqlite3_open_v2(strDBPath, &db, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
	if (rc != SQLITE_OK) {
		// 数据库打开失败。
		char* s = "数据库打开失败。";
		MessageBoxA(s, "Warning", MB_OK);
		sqlite3_close(db);
		return;
	}

	CString sql_create_table = "CREATE TABLE IF NOT EXISTS UserInfo(\
		id       INTEGER PRIMARY KEY NOT NULL,\
		Account  TEXT NOT NULL UNIQUE,\
		Pass     TEXT    NOT NULL\
		);\
		";

	// CString转const char*
	const char* sql_create_table = (LPCTSTR)str_sql_create_table;

	// 先判断数据库中是否存在UserInfo表
	int table_exist = sqlite3_exec(db, sql_create_table, NULL, NULL, NULL);
	if (table_exist != SQLITE_OK)
	{
		char* s = "建表失败!";
		MessageBoxA(s, "Warning", MB_OK);
	}

	// 关闭数据库文件
	sqlite3_close(db);
}

数据库增删改查

查询数据

SQLite3中查询数据,并将查询的结果显示在List Control中。

BOOL CDialogTest::sqlite3_SelectData(const char* sql_select)
{
	// 查询操作之前先清空list control中的所有内容
	m_ListData.DeleteAllItems(); //清空所有表项

	// 创建一个 SQLite 数据库对象
	sqlite3* db = nullptr;

	int rc = sqlite3_open_v2(strDBPath, &db, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);

	// 查询数据库中UserInfo的数据
	sqlite3_stmt* stmt = NULL;

	rc = sqlite3_prepare_v2(db, sql_select, -1, &stmt, NULL);
	if (rc != SQLITE_OK) {
		// 处理执行 SQL 语句失败的情况
		char* s = "数据库读取失败。";
		MessageBoxA(s, "Warning", MB_OK);
		sqlite3_close(db);
		return FALSE;
	}
	else {
		// 成功执行 SQL 语句
		/*char* s = "数据库读取成功。";
		MessageBoxA(NULL, s, "Successful", MB_OK);*/

		int selectCount = 0; // 记录查询结果的个数,若查询结果为空,也返回0
		while (sqlite3_step(stmt) == SQLITE_ROW)
		{
			CString strId, strAccount, strPass; // 读出数据库中text类型的数据转为CString类型

			// id
			int id = sqlite3_column_int(stmt, 0);
			CString strId;
			strId.Format(_T("%d"), id);

			// account
			strAccount.Format(_T("%s"), sqlite3_column_text(stmt, 1));
			
			// pass
			strPass.Format(_T("%s"), sqlite3_column_text(stmt, 2));

			//rc = sqlite3_step(stmt); // 继续执行下一行数据

            // 在list control中插入数据
            m_ListData.InsertItem(i, strId);
            m_ListData.SetItemText(i, 1, strAccount);
            m_ListData.SetItemText(i, 2, strPass);

			selectCount ++;
		}
		sqlite3_finalize(stmt); // 释放资源并关闭语句对象
		sqlite3_close(db); // 关闭数据库文件
		if (selectCount == 0) return FALSE; // 没查询到数据
		else return TRUE;
	}
}
插入数据

SQLite3数据中插入数据。

BOOL CDialogTest::sqlite3_InsertData(const char* sql_insert)
{
	// 创建一个 SQLite 数据库对象
	sqlite3* db = nullptr;

	int rc = sqlite3_open_v2(strDBPath, &db, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
	if (rc != SQLITE_OK) {
		// 数据库打开失败。
		char* s = "数据库打开失败。";
		MessageBoxA(s, "Warning", MB_OK);
		sqlite3_close(db);
		return FALSE;
	}

	// 判断数据库是否正常执行SQL语句
	int Is_insert = sqlite3_exec(db, sql_insert, NULL, NULL, NULL);
	if (Is_insert != SQLITE_OK)
	{
		char* s = "对UserInfo表的操作失败";
		MessageBoxA(s, "Warning", MB_OK);

		m_i = 0; // 插入数据从第一列重新开始

		return FALSE;
	}

	// 关闭数据库文件
	sqlite3_close(db);

	return TRUE;
}
删除数据
void CDialogTest::DeleteData(const char* sql_delete)
{
	InsertData(sql_delete);
}
更新数据
void CDialogTest::UpdateData(const char* sql_update)
{
	InsertData(sql_update);
}
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐