zoukankan      html  css  js  c++  java
  • 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);  
  • 相关阅读:
    sizeof--返回一个数据类型或变量占用的字节数
    跳出循环break continue
    c-for循环
    while循环语句
    什么是Python中的套接字编程?
    详解Vue八大生命周期钩子函数
    你应该知道的数仓安全
    云图说|华为云自研云数据库GaussDB NoSQL,兼容多款NoSQL接口的数据库服务
    又到一年“粽子节”,快来测测你包的粽子颜值几分
    云小课 | 华为云KYON之私网NAT网关
  • 原文地址:https://www.cnblogs.com/ransn/p/8065039.html
Copyright © 2011-2022 走看看