mfc对数据库的操作——SQLite3
mfc连接SQLite3,增删改查。
·
mfc对SQLite3的操作
配置环境
配置文件
- 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);
}
更多推荐
已为社区贡献2条内容
所有评论(0)