【MFC-9】VS2010/MFC基于对话框的SQlite3数据库编程
一、开发环境1、VS2010;2、C++ / MFC;二、SQlite3简介SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等
一、开发环境
1、VS2010;
2、C++ / MFC;
二、SQlite3简介
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月。 至2015年已经有15个年头,SQLite也迎来了一个版本 SQLite 3已经发布。(百度百科)
三、SQlite3开发例程
1、创建基于对话框的MFC程序,这里项目名字命名为“sqlite_Logiin”;
2、将SQlite3库文件和头文件共3个文件复制到项目目录下,SQlite3库及头文件可以到下面链接中下载,此文件为本人使用的库文件,在项目中测试通过;
http://download.csdn.net/detail/qingyang8513/9445022
3、在“解决方案资源管理器”中,右键点击项目名称选择“添加 ---> 现有项”,添加“sqlite3.h”和“sqlite3.lib”到项目资源文件中,如图1所示;
图1
4、打开“stdafx.h”头文件,在所有的#include之后添加“#include "sqlite3.h"”,结果如下:
#ifndef _AFX_NO_OLE_SUPPORT
#include <afxdtctl.h> // MFC 对 Internet Explorer 4 公共控件的支持
#endif
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // MFC 对 Windows 公共控件的支持
#endif // _AFX_NO_AFXCMN_SUPPORT
#include <afxcontrolbars.h> // 功能区和控件条的 MFC 支持
#include "sqlite3.h"
5、对话框类中添加数据指针变量m_sql_database,此处位置为“sqlite_LogiinDlg.h”,添加语句如下:
sqlite3* m_sql_database;
以上4步已经设置好SQlite3库,剩下的就是SQlite3的应用了,是不是很简单;
6、设计对话框界面如下图2所示:
图2
7、修改ID及添加变量,结果如图3所示;
图3
8、添加“生成用户数据库”按钮消息响应,如下:
void Csqlite_LogiinDlg::OnBnClickedButtonGenerate()
{
// TODO: 在此添加控件通知处理程序代码
// 初始化数据库,并添加原始数据
int rc;
char * err_msg = NULL;
char sql[200] = "";
rc = sqlite3_open("Database\\password.db", &m_sql_database);// 打开数据库,不存在时创建
if (rc)
{
sqlite3_close(m_sql_database); //打开失败!
MessageBox(_T("数据库打开失败,请检查后再操作!"), NULL, MB_ICONSTOP);
return ;
}
sprintf_s(sql,"CREATE TABLE IF NOT EXISTS user_database(Id int PRIMARY KEY NOT NULL, Name varchar(20) NOT NULL UNIQUE, Password varchar(20) NOT NULL)");// 创建一个表格
if (sqlite3_exec(m_sql_database, sql, NULL, NULL, &err_msg) != SQLITE_OK)
{
MessageBox(_T("操作失败,数据库链表生成错误!"), NULL, MB_ICONSTOP);
return;
}
//Id int PRIMARY KEY NOT NULL, Name varchar(20) NOT NULL UNIQUE, Password int NOT NULL
int initialNum = 3;
int rows;
char UserName[20];
int UserPasswrod;
memset(UserName, 0, 20);
strcpy(UserName,"Admin");
UserPasswrod = 12345678;
sprintf_s(sql, "INSERT INTO user_database (Id, Name, Password) VALUES (%d, '%s', '%s')", 1,UserName, "12345678");
int exit = sqlite3_exec(m_sql_database,sql,0,0,&err_msg);
sprintf_s(sql, "INSERT INTO user_database (Id, Name, Password) VALUES (%d, '%s', '%s')", 2,"管理员", "11223344");
exit = sqlite3_exec(m_sql_database,sql,0,0,&err_msg);
sprintf_s(sql, "INSERT INTO user_database (Id, Name, Password) VALUES (%d, '%s', '%s')", 3,"操作员", "55667788");
exit = sqlite3_exec(m_sql_database,sql,NULL,NULL,&err_msg);
//sqlite3_free(sql);
sqlite3_close(m_sql_database);
if(exit)
{
int iLength;
TCHAR tempTchar[100];
iLength = MultiByteToWideChar (CP_ACP, 0, err_msg, strlen (err_msg) + 1, NULL, 0) ;
MultiByteToWideChar (CP_ACP, 0, err_msg, strlen (err_msg) + 1, tempTchar, iLength) ;
CString strMessage = tempTchar;
strMessage.Format(_T("%s"),tempTchar);
MessageBox(strMessage,_T("错误"),MB_OK | MB_ICONERROR);
}
}
9、添加“读取用户数据库”按钮消息响应,如下:
void Csqlite_LogiinDlg::OnBnClickedButtonRead()
{
// TODO: 在此添加控件通知处理程序代码
// 读取数据库
int rc;
char * err_msg = NULL;
char *sql = NULL;
rc = sqlite3_open("Database\\password.db", &m_sql_database);// 打开数据库,不存在时创建
if (rc)
{
sqlite3_close(m_sql_database); //打开失败!
MessageBox(_T("数据库打开失败,请检查后再操作!"), NULL, MB_ICONSTOP);
return ;
}
sql = "CREATE TABLE IF NOT EXISTS user_database(Id int PRIMARY KEY NOT NULL, Name varchar(20) NOT NULL UNIQUE, Password varchar(20) NOT NULL)";// 创建一个表格
if (sqlite3_exec(m_sql_database, sql, NULL, NULL, &err_msg) != SQLITE_OK)
{
MessageBox(_T("操作失败,数据库链表生成错误!"), NULL, MB_ICONSTOP);
return;
}
m_listUserData.DeleteAllItems();//
//搜索数据库中的用户名和密码,然后进行校验
sql = sqlite3_mprintf("select * from %s","user_database");
sqlite3_exec(m_sql_database,sql,&SQLite_Callback_Disply_UserInfo,&m_listUserData,&err_msg);
sqlite3_free(sql);
sqlite3_close(m_sql_database);
UpdateData(false);
}
10,、生成并测试即可,结果如下:
图4
备注:
1)此处为了演示创建和读取数据库,插入和删除按钮的响应为列出,具体操作可以参考下面的“SQlite3常用使用操作”自行添加;
2)需在项目目录下首先建立“Database”文件夹,当然此处也可以在程序中完成,具体可参考其他微博内容。
更多推荐
所有评论(0)