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("数据导入成功"));}}
VS2017+MFC+sqlite数据库操作相关推荐
- 数据存储之 SQLite 数据库操作(三)
上一讲中我们讲到了SQLite数据库的操作方法 [数据存储之SQLite数据库操作(二)],我们主要是以SQL语句对数据库进行增删改查,这一讲我们来学习一下 Android 建议的对数据库的操作方法 ...
- 数据存储之 SQLite 数据库操作(二)
上一讲我们讲解了SQLite数据库的创建[数据存储之 SQLite 数据库操作(一)],还有更新的操作,这一讲我们来讲解一下数据库的增删改查,这边的程序是对上一个程序进行修改,建议结合上一讲内容进行学 ...
- Qt下Sqlite数据库操作
Sqlite数据库作为Qt项目开发中经常使用的一个轻量级的数据库,可以说是兼容性相对比较好的数据库之一(Sqlite就像Qt的亲儿子,如同微软兼容Access数据库一样).关于Sqlite和Qt的千丝 ...
- C# SQLite 数据库操作语句与文件视图管理器
//sqlite数据库视图管理器 SQLiteSpy是一款专业的SQLite数据库管理,主要用于读取sqlite数据库,建立新的SQL查询,视图,复制和删除表.编辑单元格,以及查看索引,触发器和排序规 ...
- java sqlite 操作_Java SQLite 数据库操作
Java SQLite 数据库操作 1.[代码][Java]代码 package UI; import java.sql.Connection; import java.sql.DriverManag ...
- 实验8 SQLite数据库操作
实验报告 课程名称 基于Android平台移动互联网开发 实验日期 2016/5/6 实验项目名称 SQLite数据库操作 实验地点 综合实验室 实验类型 □验证型 √设计型 □综合型 学 ...
- Android sqlite数据库操作通用框架AHibernate(一)-CRUD示例和使用步骤
AHibernate简介 一句话描述,使用AHibernate框架进行sqlite数据库操作您将从重复性劳动中解脱出来. (一)支持功能: 1.自动建表,支持属性来自继承类:可根据注解自动完成建表,并 ...
- SQLite数据库操作实践
SQLite数据库操作实践 SQLite存储类型 null - 空值 integer - 有符号整数,自增列定义 id integer primary key autoincrement ...
- SQLite数据库操作+事务处理
SQLite数据库操作 SQLite数据库介绍 Android系统中集成的轻量级的数据库 特点: 轻量级 是以单个文件的形式进行存取 跨平台 支持多个操作系统 零配置 无需安装, 直接使用 嵌入式 内 ...
最新文章
- 数据库的定义、模型 和 模式
- 【PAT笔记】C++标准模板库STL(二)——set的用法和示例
- 位向量(bit vector)(算法导论第十一章11.1-2)
- 2015-2016-1学期 《信息安全系统设计基础》课程总结
- java 编译中没有清除之前编译出来的文件。
- sql 查询数据库索引重建_不良的数据库索引– SQL查询性能的杀手–建议
- gluster分布式存储 入门篇
- javascript——js string 转 int 注意的问题——parseInt(转)
- HDU 3394 Railway(点双连通分量)
- 02-CSS基础与进阶-day11_2018-09-17-21-35-14
- python监控钉钉群消息_使用python对mysql主从进行监控,并调用钉钉发送报警信息...
- matlab对数画图命令,MATLAB命令画图
- 向量自回归VAR模型、结构向量自回归SVAR模型、VMA模型
- ROS入门之——浅谈launch
- hexo入门学习(四):文章(带图片)
- 地理信息系统中最基本的两种数据模型:矢量模型和栅格模型
- Fantastic Four: 具有恶意安全的诚实大多数四方安全计算
- 复位电路加二极管的作用
- win10子系统基本备份
- python str center_Python str方法总结