MFC中使用sqlite3操作数据库 创建、插入、查询、修改、删除数据
Published on 2022-07-26 09:45 in 暂未分类 with 萧海~

MFC中使用sqlite3操作数据库 创建、插入、查询、修改、删除数据

    需要用到的文件有sqlite3.h 、sqlite3.dll、sqlite3.lib。获取方法可参考https://blog.csdn.net/qinbaby/article/details/83107345 。

    将这三个文件拷贝到自己新建MFC项目目录下,在解决方案窗口下 添加现有项,选择sqlite3.h 、sqlite3.dll、sqlite3.lib这三个文件,添加到项目中。

    然后在.cpp开头添加#include “sqlite3.h”

    一些宏定义:

    #define SQL_CREATE_TABLE "Create table if not exists User_info(UserName char(20), Password char(20), Level char(5))"
    #define SQL_INSERT_DATA "Insert into User_info (UserName, Password, Level) values ('%s', '%s', '%s')"
    #define SQL_QUERY_DATA "Select * from User_info"

    以及自定义管理struct

    typedef struct _INFO_
    {
    CString UserName;
    CString Password;
    CString Level;
    }Info;
    sqlite3* m_pDB;

    1、创建数据库:

    int rc;
    char* err_msg = NULL;
    sqlite3* m_pDB;
    rc = sqlite3_open("UserData.db", &m_pDB);// 打开数据库,不存在时创建
    if (rc)
    {
    sqlite3_close(m_pDB); //打开失败!
    MessageBox(_T("数据库打开失败,请检查后再操作!"));
    return;
    }
    if (sqlite3_exec(m_pDB, SQL_CREATE_TABLE, NULL, NULL, &err_msg) != SQLITE_OK)
    {
    MessageBox(_T("操作失败,数据库链表生成错误!"));
    return;
    }
    sqlite3_close(m_pDB);

    2、插入数据

    int rc;
    char* err_msg = NULL;
    char sql[256];
    rc = sqlite3_open("UserData.db", &m_pDB);// 打开数据库,不存在时创建
    if (rc)
    {
    sqlite3_close(m_pDB); //打开失败!
    MessageBox(_T("数据库打开失败,请检查后再操作!"));
    return;
    }
    USES_CONVERSION;
    sprintf_s(sql, SQL_INSERT_DATA, W2A(c_UserName), W2A(c_PassWord), W2A(c_Level));
    int exit = sqlite3_exec(m_pDB, sql, 0, 0, &err_msg);
    if (exit != SQLITE_OK)
    {
    sqlite3_free(err_msg);
    sqlite3_close(m_pDB);
    CString cMessagebox;
    cMessagebox.Format(_T("用户注册失败,失败原因:%s"), (LPCTSTR)err_msg);
    return;
    }
    sqlite3_close(m_pDB);
    MessageBox(_T("用户添加成功!"));

    3、查询数据,两种方式都可以实现:

    方式1:

    CString ErrMessage;
    int rc;
    char* err_msg = NULL;
    rc = sqlite3_open("UserData.db", &m_pDB);// 打开数据库,不存在时创建
    if (rc)
    {
    sqlite3_close(m_pDB); //打开失败!
    MessageBox(_T("数据库打开失败,请检查后再操作!"), NULL, MB_ICONSTOP);
    return;
    }
    sqlite3_stmt* stmt;
    rc = sqlite3_prepare_v2(m_pDB, SQL_QUERY_DATA, -1, &stmt, 0);
    if (rc != SQLITE_OK)
    {
    sqlite3_finalize(stmt);
    sqlite3_close(m_pDB);
    return;
    }
    m_List_UserManage.DeleteAllItems();
    int m_line = 0;
    rc = sqlite3_step(stmt);
    while (rc == SQLITE_ROW)
    {
    Info info;
    info.UserName = sqlite3_column_text(stmt, 0);
    info.Password = sqlite3_column_text(stmt, 1);
    info.Level = sqlite3_column_text(stmt, 2);
    m_List_UserManage.InsertItem(m_line, info.UserName);
    m_List_UserManage.SetItemText(m_line, 1, info.Password);
    m_List_UserManage.SetItemText(m_line, 2, info.Level);
    m_line = m_line + 1;
    rc = sqlite3_step(stmt);
    }
    sqlite3_finalize(stmt);
    sqlite3_close(m_pDB);

    方式2(未验证):

    int rc;
    char * err_msg = NULL;
    rc = sqlite3_open("myDatabase.db", &m_pDB);// 打开数据库,不存在时创建
    if (rc)
    {
    sqlite3_close(m_pDB); //打开失败!
    MessageBox(_T("数据库打开失败,请检查后再操作!"), NULL, MB_ICONSTOP);
    return ;
    }
    int row=0;
    int colum=0;
    char **azResult;
    CArray<Info> arr;
    rc=sqlite3_get_table(m_pDB,SQL_QUERY_DATA,&azResult,&row,&colum,&err_msg);
    for (int i=1; i<row+1; i++)
    {
    Info info;
    info.subject= *(azResult+i*colum+1);
    info.name= *(azResult+i*colum+2);
    info.mark= *(azResult+i*colum+3);
    arr.Add(info);
    }
    sqlite3_free_table(azResult);
    sqlite3_close(m_pDB);

    4、修改数据:

    //修改数据库
    cUserName = DataChangeDlg.c_UserName;
    cPassWord = DataChangeDlg.c_PassWord;
    cLevel = DataChangeDlg.c_Level;
    int rc;
    char* err_msg = NULL;
    char sql[256];
    rc = sqlite3_open("UserData.db", &m_pDB);// 打开数据库,不存在时创建
    if (rc)
    {
    sqlite3_close(m_pDB); //打开失败!
    MessageBox(_T("数据库打开失败,请检查后再操作!"));
    return;
    }
    USES_CONVERSION;
    sprintf_s(sql, "UPDATE User_info Set Password='%s' WHERE UserName='%s';", W2A(cPassWord), W2A(cUserName));
    rc = sqlite3_exec(m_pDB, sql, NULL, 0, &err_msg);
    if (rc != SQLITE_OK)
    {
    CString cMessagebox;
    cMessagebox.Format(_T("密码更新失败,失败原因:%s"), (LPCTSTR)err_msg);
    MessageBox(cMessagebox);
    sqlite3_free(err_msg);
    sqlite3_close(m_pDB);
    return;
    }
    sprintf_s(sql, "UPDATE User_info Set Level='%s' WHERE UserName='%s';", W2A(cLevel), W2A(cUserName));
    rc = sqlite3_exec(m_pDB, sql, NULL, 0, &err_msg);
    if (rc != SQLITE_OK)
    {
    CString cMessagebox;
    cMessagebox.Format(_T("用户等级更新失败,失败原因:%s"), (LPCTSTR)err_msg);
    MessageBox(cMessagebox);
    sqlite3_free(err_msg);
    sqlite3_close(m_pDB);
    return;
    }
    MessageBox(_T("用户修改完成!"));
    sqlite3_close(m_pDB);

    5、删除数据:

    CString ErrMessage;
    char sql[256];
    int rc;
    char* err_msg = NULL;
    rc = sqlite3_open("UserData.db", &m_pDB);// 打开数据库,不存在时创建
    if (rc)
    {
    sqlite3_close(m_pDB); //打开失败!
    MessageBox(_T("数据库打开失败,请检查后再操作!"), NULL, MB_ICONSTOP);
    return;
    }
    //删除数据
    USES_CONVERSION;
    sprintf_s(sql, "delete from User_info WHERE UserName='%s';", W2A(cUserName));
    rc = sqlite3_exec(m_pDB, sql, 0, 0, &err_msg);
    if (rc != SQLITE_OK)
    {
    CString cMessagebox;
    cMessagebox.Format(_T("删除失败,失败原因:%s"), (LPCTSTR)err_msg);
    MessageBox(cMessagebox);
    sqlite3_free(err_msg);
    return;
    }
    MessageBox(_T("该用户已删除!"));
    sqlite3_close(m_pDB);
    m_List_UserManage.DeleteItem(nId);
    posted @   萧海~  阅读(610)  评论(0编辑  收藏  举报
    相关博文:
    阅读排行:
    · winform 绘制太阳,地球,月球 运作规律
    · AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
    · 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
    · 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
    · 上周热点回顾(3.3-3.9)
    点击右上角即可分享
    微信分享提示
    电磁波切换