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);  
  • 相关阅读:
    LeetCode120 Triangle
    LeetCode119 Pascal's Triangle II
    LeetCode118 Pascal's Triangle
    LeetCode115 Distinct Subsequences
    LeetCode114 Flatten Binary Tree to Linked List
    LeetCode113 Path Sum II
    LeetCode112 Path Sum
    LeetCode111 Minimum Depth of Binary Tree
    Windows下搭建PHP开发环境-WEB服务器
    如何发布可用于azure的镜像文件
  • 原文地址:https://www.cnblogs.com/ransn/p/8065039.html
Copyright © 2011-2022 走看看