300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > MFC中使用sqlite3操作数据库 创建 插入数据 查询数据

MFC中使用sqlite3操作数据库 创建 插入数据 查询数据

时间:2021-11-05 14:52:36

相关推荐

MFC中使用sqlite3操作数据库 创建 插入数据 查询数据

需要用到的文件有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_finalize(stmt);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_finalize(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);

其他的删除,更新等操作都是类似的。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。