VS2017+MFC+sqlite数据库操作

创建数据库

1.用navicat创建sqlite数据库,名称为student
在这里插入图片描述
2.填写数据库内容
在这里插入图片描述

VS2017MFC操作

1.添加以下类及配置文件到程序文件夹中
在这里插入图片描述
并在CDxxxxDlg程序中添加SDDb.cpp和SDDb.h文件
在CDxxxxDlg.h程序中添加预编译头文件
#include"sqlite3.h"
在CDxxxxDlg.cpp程序中添加预编译头文件
#include
#include"sqlite3.h"
#include “SDDb.h”

2.在SDDb.cpp中更改数据库文件名称为“student.db”
在这里插入图片描述
3.用多线程的方式读取数据库文件,添加一个按钮,添加以下代码

void CDatabaseDlg::OnBnClickedButton1Load()
{
	// TODO: 在此添加控件通知处理程序代码
	if (m_hTread == NULL)
	{
		m_hTread=::CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)CDatabaseDlg::ThreadProc, this, 0, NULL);
	}
}

UINT CDatabaseDlg::ThreadProc(void* param1, void* param2)//线程函数
{
	CDatabaseDlg* pThis = (CDatabaseDlg*)param1;
	pThis->LoadUser();
	return 0;
}


//sqlite3* db;
void CDatabaseDlg::LoadUser()
{
	::CoInitialize(NULL);//每个操作数据库的线程都要加这个
	
	ReadList();
	/*int result = sqlite3_open("student.db", &db);
	if(result != SQLITE_OK)
	{
		MessageBox(NULL, TEXT("打开数据库失败"), MB_OK);
		return ;
	}
	else
	{
		MessageBox(NULL, TEXT("打开数据库成功"), MB_OK);
	}*/
	
	/*CSDDb &pDB = CSDDb::GetInstance();
	int row, col;
	vector<vector<string>> data;
	string sql = "SELECT * FROM RESULTLIST";
	pDB.GetDataCount(sql, row, col);
	tolist(NULL, row);
	pDB.GetDataInfo(sql, data);
	tolistPP(data, row, col);*/
}


void CDatabaseDlg::ReadList()
{

	bool ret;
	vector<vector<string>> vecData;
	
	vector<vector<string>>::const_iterator row;
	vector<string>::const_iterator col;
	string historyRecord = "student";  //填写表的名称
	string sql = "select * from " + historyRecord;
	ret = CSDDb::GetInstance().GetDataInfo(sql, vecData);

	if (ret)
	{
		string str[10];
		for (row = vecData.begin(); row != vecData.end(); ++row)
		{
			int i = 0;
			for (col = (*row).begin(); col != (*row).end(); ++col)
			{
				str[i] = *col;
				i++;
			}
			m_list.InsertItem(0, (_bstr_t)str[0].c_str());  //显示第一列
			m_list.SetItemText(0, 1, (_bstr_t)str[1].c_str());  //显示第二列
			m_list.SetItemText(0, 2, (_bstr_t)str[2].c_str());  //显示第三列
			m_list.SetItemText(0, 3, (_bstr_t)str[3].c_str());  //显示第四列
			m_list.SetItemText(0, 4, (_bstr_t)str[4].c_str());
			m_list.SetItemText(0, 5, (_bstr_t)str[5].c_str());
		}

	}
	//Invalidate();
}


改变列表框的背景颜色

在初始化程序中添加以下代码:

m_list.SetBkColor(RGB(155, 255, 55));
	//设置文本背景颜色
	m_list.SetTextBkColor(RGB(255, 199, 199));
	//设置文本颜色
	m_list.SetTextColor(RGB(60, 60, 255));

删除列表框的某一行内容

在初始化程序中添加以下代码

m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT);//可以选中所有数据

添加按钮点击事件,并添加程序:

int nItem = m_list.GetSelectionMark();
	m_list.DeleteItem(nItem);
	//listctrl内容进行大数据量更新时,避免闪烁
	m_list.SetRedraw(FALSE);
	//更新内容
	m_list.SetRedraw(TRUE);
	m_list.Invalidate();
	m_list.UpdateWindow();

https://blog.csdn.net/langxm2006/article/details/55685173?ops_request_misc=%7B%22request_id%22%3A%22158199739619724811813083%22%2C%22scm%22%3A%2220140713.130056874…%22%7D&request_id=158199739619724811813083&biz_id=0&utm_source=distribute.pc_search_result.none-task

创建数据库并添加内容到数据库

先定义一些宏,用来创建数据库和表

#define SQL_CREATE_TABLE "Create table if not exists student1(id int PRIMARY KEY ASC, name char(10), age char(10), score char(5))"  //创建表
#define SQL_INSERT_DATA "Insert into student1 (id, name, age, score) values (%d, '%s', '%s', '%s')"  //插入表
#define SQL_QUERY_DATA "Select * from student1"    //数据查询

创建一个全局变量

typedef struct _INFO_
{
	CString name;
	CString age;  //表的内容
	CString score;
}Info;


sqlite3 *m_pDB;

添加两个按钮函数

void CServerDataDlg::OnBnClickedButton4()
{
	// TODO: 在此添加控件通知处理程序代码

	int rc;
	char * err_msg = NULL;
	rc = sqlite3_open("student.db", &m_pDB);// 打开数据库,不存在时创建  
	if (rc)
	{
		sqlite3_close(m_pDB);  //打开失败!   
		MessageBox(_T("数据库打开失败,请检查后再操作!"), NULL, MB_ICONSTOP);
		return;
	}
	else
	{
		MessageBox(_T("数据库打开成功"));
	}

	if (sqlite3_exec(m_pDB, SQL_CREATE_TABLE, NULL, NULL, &err_msg) != SQLITE_OK)
	{
		MessageBox(_T("操作失败,数据库链表生成错误!"), NULL, MB_ICONSTOP);
		return;
	}
	sqlite3_close(m_pDB);
	
}


void CServerDataDlg::OnBnClickedButton7()
{
	// TODO: 在此添加控件通知处理程序代码

	int rc;
	char * err_msg = NULL;
	char sql[256];

	rc = sqlite3_open("student.db", &m_pDB);// 打开数据库,不存在时创建  
	if (rc)
	{
		sqlite3_close(m_pDB);  //打开失败!   
		MessageBox(_T("数据库打开失败,请检查后再操作!"), NULL, MB_ICONSTOP);
		return;
	}
	else
	{
		MessageBox(_T("数据库打开成功"));
	}
	
	sprintf_s(sql, SQL_INSERT_DATA, 9, "john", "24", "36");
	int exit = sqlite3_exec(m_pDB, sql, 0, 0, &err_msg);
	if (exit != SQLITE_OK)
	{
		sqlite3_close(m_pDB);
		MessageBox(_T("数据导入失败"));
		return;
	}
	else
	{
		MessageBox(_T("数据导入成功"));
	}
	
	
}

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值