创建数据库
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("数据导入成功"));
}
}