MFC中使用sqlite3操作数据库

需要用到的文件有sqlite3.h 、sqlite3.dll、sqlite3.lib。网上很多人分享下载地址这里不再赘述。

将这三个文件拷贝到自己新建MFC项目目录下,在解决方案窗口下 添加现有项,选择sqlite3.h 、sqlite3.dll、sqlite3.lib这三个文件,添加到项目中。

然后自己的.cpp中#include “sqlite3.h”

一些宏定义:

[cpp] view plain copy
 
  1. #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))"  
  2.   
  3. #define SQL_INSERT_DATA "Insert into stu_info (id, subject, name, mark) values (%d, '%s', '%s', '%s')"  
  4.   
  5. #define SQL_QUERY_DATA "Select * from stu_info"  



以及自定义管理struct

[cpp] view plain copy
 
  1. typedef struct _INFO_  
  2. {  
  3. CString subject;  
  4. CString name;  
  5. CString mark;  
  6. }Info;  



[cpp] view plain copy
 
  1. sqlite3 *m_pDB;  



1、创建数据库:

[cpp] view plain copy
 
  1. int rc;         
  2. char * err_msg = NULL;    
  3.   
  4. rc = sqlite3_open("myDatabase.db", &m_pDB);// 打开数据库,不存在时创建    
  5. if (rc)       
  6. {    
  7. sqlite3_close(m_pDB);  //打开失败!     
  8. MessageBox(_T("数据库打开失败,请检查后再操作!"), NULL, MB_ICONSTOP);    
  9. return ;    
  10. }   
  11.   
  12. if (sqlite3_exec(m_pDB, SQL_CREATE_TABLE, NULL, NULL, &err_msg) != SQLITE_OK)     
  13. {     
  14. MessageBox(_T("操作失败,数据库链表生成错误!"), NULL, MB_ICONSTOP);    
  15. return;     
  16. }  
  17. sqlite3_close(m_pDB);  



2、插入数据

[cpp] view plain copy
 
  1. int rc;         
  2. char * err_msg = NULL;    
  3. char sql[256];  
  4.   
  5. rc = sqlite3_open("myDatabase.db", &m_pDB);// 打开数据库,不存在时创建    
  6. if (rc)       
  7. {    
  8. sqlite3_close(m_pDB);  //打开失败!     
  9. MessageBox(_T("数据库打开失败,请检查后再操作!"), NULL, MB_ICONSTOP);    
  10. return ;    
  11. }   
  12.   
  13. sprintf_s(sql, SQL_INSERT_DATA, 1, "Java", "John", "3");  
  14. int exit = sqlite3_exec(m_pDB, sql, 0, 0, &err_msg);    
  15. if (exit!=SQLITE_OK)  
  16. {  
  17. sqlite3_close(m_pDB);  
  18. return;  
  19. }  
  20.   
  21. sprintf_s(sql, SQL_INSERT_DATA, 2, "C", "Deny", "1");    
  22. exit = sqlite3_exec(m_pDB,sql, 0 ,0, &err_msg);    
  23. if (exit!=SQLITE_OK)  
  24. {  
  25. sqlite3_close(m_pDB);  
  26. return;  
  27. }  
  28.   
  29. sprintf_s(sql, SQL_INSERT_DATA, 3, "C++", "James", "8");  
  30. exit = sqlite3_exec(m_pDB, sql, 0, 0, &err_msg);    
  31. if (exit!=SQLITE_OK)  
  32. {  
  33. sqlite3_close(m_pDB);  
  34. return;  
  35. }  
  36.   
  37. sprintf_s(sql, SQL_INSERT_DATA, 4, "C#", "Killy", "5");  
  38. exit = sqlite3_exec(m_pDB, sql, 0, 0, &err_msg);  
  39. if (exit!=SQLITE_OK)  
  40. {  
  41. sqlite3_close(m_pDB);  
  42. return;  
  43. }  
  44.   
  45. sqlite3_close(m_pDB);    



3、查询数据,两种方式都可以实现:

方式1:

[cpp] view plain copy
 
  1. int rc;        
  2. rc = sqlite3_open("myDatabase.db", &m_pDB);// 打开数据库,不存在时创建    
  3. if (rc)       
  4. {    
  5. sqlite3_close(m_pDB);  //打开失败!     
  6. MessageBox(_T("数据库打开失败,请检查后再操作!"), NULL, MB_ICONSTOP);    
  7. return ;    
  8. }   
  9. CArray<Info> arr;  
  10. sqlite3_stmt *stmt;  
  11. rc=sqlite3_prepare_v2(m_pDB, SQL_QUERY_DATA, -1, &stmt, 0);  
  12. if (rc!=SQLITE_OK)  
  13. {  
  14. sqlite3_close(m_pDB);  
  15. return;  
  16. }  
  17. rc = sqlite3_step(stmt);  
  18. while(rc == SQLITE_ROW )  
  19. {  
  20. Info info;  
  21. info.subject = sqlite3_column_text(stmt,1);  
  22. info.name = sqlite3_column_text(stmt,2);  
  23. info.mark = sqlite3_column_text(stmt,3);  
  24. arr.Add(info);  
  25. rc = sqlite3_step(stmt);  
  26. }  
  27. sqlite3_close(m_pDB);  



方式2:

[cpp] view plain copy
 
    1. int rc;         
    2. char * err_msg = NULL;    
    3. rc = sqlite3_open("myDatabase.db", &m_pDB);// 打开数据库,不存在时创建    
    4. if (rc)       
    5. {    
    6. sqlite3_close(m_pDB);  //打开失败!     
    7. MessageBox(_T("数据库打开失败,请检查后再操作!"), NULL, MB_ICONSTOP);    
    8. return ;    
    9. }   
    10.   
    11. int row=0;   
    12. int colum=0;  
    13. char **azResult;  
    14. CArray<Info> arr;  
    15. rc=sqlite3_get_table(m_pDB,SQL_QUERY_DATA,&azResult,&row,&colum,&err_msg);  
    16. for (int i=1; i<row+1; i++)  
    17. {  
    18. Info info;  
    19. info.subject= *(azResult+i*colum+1);  
    20. info.name= *(azResult+i*colum+2);  
    21. info.mark= *(azResult+i*colum+3);  
    22. arr.Add(info);  
    23. }  
    24. sqlite3_free_table(azResult);  
    25. sqlite3_close(m_pDB);  
原文地址:https://www.cnblogs.com/ransn/p/8065039.html