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);
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MFC(Microsoft Foundation Class)是一组用于开发Windows应用程序的类库,而SQLite是一种轻型的嵌入式数据库引擎。在MFC使用SQLite并加密的过程主要包括以下几个步骤: 1. 在MFC应用程序引入SQLite的相关文件和头文件。可以通过下载SQLite的最新版本,将相关的库文件和头文件添加到MFC项目。 2. 创建SQLite数据库并打开连接。在MFC应用程序可以使用SQLite提供的API来创建和打开数据库连接。可以通过调用sqlite3_open函数指定一个数据库文件名来创建和打开数据库连接。 3. 在数据库创建表和字段。可以使用SQLite提供的API来创建表和定义字段,以存储和检索数据。可以使用SQL语句来创建表和字段,如CREATE TABLE和ALTER TABLE等。 4. 加密数据库。在SQLite,可以通过设置密码来对数据库进行加密。可以使用sqlite3_key函数来设置数据库密码,并使用sqlite3_rekey函数来修改或移除密码。在使用密码对数据库进行加密后,需要在每次打开数据库连接时先调用sqlite3_key函数以提供正确的密码。 5. 对数据库进行操作。在MFC应用程序可以使用SQLite提供的API对数据库进行插入、更新和删除操作。可以使用SQL语句来执行各种操作,如INSERT、UPDATE和DELETE等。 6. 关闭数据库连接。在MFC应用程序,需要在使用数据库后调用sqlite3_close函数来关闭数据库连接,释放相关资源。 综上所述,MFC使用SQLite并加密的过程包括引入SQLite文件和头文件、创建数据库和表、加密数据库、对数据库进行操作以及关闭数据库连接等步骤。通过这些步骤,可以在MFC应用程序实现对SQLite数据库的加密和使用。 ### 回答2: MFC(Microsoft Foundation Classes)是一个用于开发Windows应用程序的C++类库。SQLite是一种嵌入式数据库管理系统。要在MFC使用SQLite数据库进行加密,可以按照以下步骤进行操作。 首先,需要确保你的MFC项目已经正确地集成了SQLite数据库。你可以通过添加SQLite的头文件和链接SQLite的库文件来实现。 其次,为了在MFCSQLite数据库进行加密,可以使用SQLite提供的加密扩展库,如SQLCipher。SQLCipher使用密钥对数据库进行加密和解密操作。 要使用SQLCipher进行加密,需要下载SQLCipher的预编译库,并将其添加到MFC项目。然后,将相关的头文件引入项目。 接下来,在MFC项目数据库连接代码,需要调用SQLCipher提供的函数来打开加密数据库。首先,你需要提供一个密钥,然后调用相应的函数来打开数据库使用SQLCipher函数将密钥传递给数据库,以实现加密。 一旦数据库已经被加密,你就可以像使用普通的SQLite数据库一样使用它。可以执行查询插入、更新和删除操作。 需要注意的是,在打开加密数据库之前,你需要确保已经安装了适用于你的操作系统的SQLCipher库。 总之,要在MFCSQLite数据库进行加密,首先需要集成SQLite和SQLCipher的库文件和头文件到MFC项目。然后,使用SQLCipher函数调用来打开加密数据库,并提供相应的密钥。在此之后,就可以像使用普通SQLite数据库一样使用加密数据库

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值