需要用到的文件有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);