需要用到的文件有sqlite3.h 、sqlite3.dll、sqlite3.lib。网上很多人分享下载地址这里不再赘述。
将这三个文件拷贝到自己新建MFC项目目录下,在解决方案窗口下 添加现有项,选择sqlite3.h 、sqlite3.dll、sqlite3.lib这三个文件,添加到项目中。
然后自己的.cpp中#include “sqlite3.h”
一些宏定义:
#define SQL_CREATE_TABLE "Create table if not exists stu_info(id int PRIMARY KEY ASC, subject char(10), name char(10), mark char(5))"
#define SQL_INSERT_DATA "Insert into stu_info (id, subject, name, mark) values (%d, '%s', '%s', '%s')"
#define SQL_QUERY_DATA "Select * from stu_info"
以及自定义管理struct
typedef struct _INFO_
{
CString subject;
CString name;
CString mark;
}Info;
sqlite3 *m_pDB;
1、创建数据库:
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 ;
}
if (sqlite3_exec(m_pDB, SQL_CREATE_TABLE, NULL, NULL, &err_msg) != SQLITE_OK)
{
MessageBox(_T("操作失败,数据库链表生成错误!"), NULL, MB_ICONSTOP);
return;
}
sqlite3_close(m_pDB);
2、插入数据
int rc;
char * err_msg = NULL;
char sql[256];
rc = sqlite3_open("myDatabase.db", &m_pDB);// 打开数据库,不存在时创建
if (rc)
{
sqlite3_close(m_pDB); //打开失败!
MessageBox(_T("数据库打开失败,请检查后再操作!"), NULL, MB_ICONSTOP);
return ;
}
sprintf_s(sql, SQL_INSERT_DATA, 1, "Java", "John", "3");
int exit = sqlite3_exec(m_pDB, sql, 0, 0, &err_msg);
if (exit!=SQLITE_OK)
{
sqlite3_close(m_pDB);
return;
}
sprintf_s(sql, SQL_INSERT_DATA, 2, "C", "Deny", "1");
exit = sqlite3_exec(m_pDB,sql, 0 ,0, &err_msg);
if (exit!=SQLITE_OK)
{
sqlite3_close(m_pDB);
return;
}
sprintf_s(sql, SQL_INSERT_DATA, 3, "C++", "James", "8");
exit = sqlite3_exec(m_pDB, sql, 0, 0, &err_msg);
if (exit!=SQLITE_OK)
{
sqlite3_close(m_pDB);
return;
}
sprintf_s(sql, SQL_INSERT_DATA, 4, "C#", "Killy", "5");
exit = sqlite3_exec(m_pDB, sql, 0, 0, &err_msg);
if (exit!=SQLITE_OK)
{
sqlite3_close(m_pDB);
return;
}
sqlite3_close(m_pDB);
3、查询数据,两种方式都可以实现:
方式1:
int rc;
rc = sqlite3_open("myDatabase.db", &m_pDB);// 打开数据库,不存在时创建
if (rc)
{
sqlite3_close(m_pDB); //打开失败!
MessageBox(_T("数据库打开失败,请检查后再操作!"), NULL, MB_ICONSTOP);
return ;
}
CArray<Info> arr;
sqlite3_stmt *stmt;
rc=sqlite3_prepare_v2(m_pDB, SQL_QUERY_DATA, -1, &stmt, 0);
if (rc!=SQLITE_OK)
{
sqlite3_close(m_pDB);
return;
}
rc = sqlite3_step(stmt);
while(rc == SQLITE_ROW )
{
Info info;
info.subject = sqlite3_column_text(stmt,1);
info.name = sqlite3_column_text(stmt,2);
info.mark = sqlite3_column_text(stmt,3);
arr.Add(info);
rc = sqlite3_step(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);
其他的删除,更新等操作都是类似的。