使用 sqllite 小结

本文提供了一个使用C++操作SQLite数据库的简单类实现。包括如何下载SQLite、创建数据库及表,以及通过示例代码展示如何执行查询和命令。

1 去官网下载:http://www3.sqlite.org/download.html

2 创建数据库和表 :http://www3.sqlite.org/cli.html ,linux 和 windows 环境是不一样的

3 示例代码 http://www3.sqlite.org/quickstart.html


一个简单的 C++ 操作类 CSqlite.h

#pragma once

#include "sqlite3.h"


class CSqlite

{

 public:

     CSqlite(void);

     virtual ~CSqlite(void);


     friend int CallBack(void *lpParameter, int argc, char **argv, char **azColName);

public:

     int SqliteOpen(string strFile);

     bool ExecuteQuery(string strQuery);

     bool ExecuteCmd(string strCmd);

     bool GetQueryData(vector<string> &vecColName,vector<vector<string> > &vecData);


    bool GetQueryData(vector<string> &vecColName,vector<string> &vecData);    

     void Close();


private:

     sqlite3 *m_pDB;

     vector<vector<string> > m_vecData;

     vector<string> m_vecCol;

};




CSqlite.cpp

#include "StdAfx.h"

#include "Sqlite.h"


CSqlite::CSqlite(void)

{

    m_pDB = NULL;

}


CSqlite::~CSqlite(void)

{

    Close();

}


int CSqlite::SqliteOpen(string strFile)

{

    return SQLITE_OK == sqlite3_open(strFile.c_str(),&m_pDB);

}


int CallBack(void *lpParameter, int argc, char **argv, char **azColName)

{

     CSqlite *pSqlite = (CSqlite *)lpParameter;

     if (NULL == pSqlite)

         return 0;

    

     vector<string> vecData;

     for (int i = 0;i < argc;i++)

     {

         if (argv[i])

         {

              vecData.push_back(argv[i]);

         }

         else

             vecData.push_back(" ");

    }


     if (vecData.size() > 0)

     pSqlite->m_vecData.push_back(vecData);

    

     set<string> setCol;

     setCol.insert(pSqlite->m_vecCol.begin(),pSqlite->m_vecCol.end());

     for (int j = 0;j < argc;j++)

     {

         if (azColName[j]

         && setCol.find(azColName[j]) == setCol.end()

         )

         {

              pSqlite->m_vecCol.push_back(azColName[j]);

         }

     }

     return 0;

}


bool CSqlite::ExecuteQuery(string strQuery)

{

     if (NULL == m_pDB)

         return false;

    

     m_vecData.clear();

     m_vecCol.clear();

    

     char *zErrMsg = 0;

     int iRet = sqlite3_exec(m_pDB,strQuery.c_str(),CallBack,this,&zErrMsg);

    

     if( iRet != SQLITE_OK ){

     // 输出错误信息

        sqlite3_free(zErrMsg);

     }

     return iRet == SQLITE_OK;

}


bool CSqlite::ExecuteCmd(string strCmd)

{

     if (NULL == m_pDB)

         return false;

    

     char *zErrMsg = 0;

     int iRet = sqlite3_exec(m_pDB,strCmd.c_str(),CallBack,this,&zErrMsg);

    

     if( iRet != SQLITE_OK ){

         // 输出错误信息

         sqlite3_free(zErrMsg);

     }

     return iRet == SQLITE_OK;

}



bool CSqlite::GetQueryData(vector<string> &vecColName,vector<vector<string> > &vecData)

{

     vector<int> vecIndex;

     for (int i = 0;i < (int)vecColName.size();i++)

     {

         for (int j = 0;j < (int)m_vecCol.size();j++)

         {

              if (_stricmp(vecColName.at(i).c_str(),m_vecCol.at(j).c_str()) == 0)

             {

                 vecIndex.push_back(j);

                 break;

             }

         }

    }

    

     for (int i = 0; i < (int)m_vecData.size();i++)

     {

         vector<string> vecTemp;

         vector<string> vecItem = m_vecData[i];

         for (int j = 0;j < (int)vecIndex.size();j++)

         {

             int iIndx = vecIndex[j];

             if (iIndx < (int)vecItem.size())

             {

                 vecTemp.push_back(vecItem[iIndx]);

             }

         }

         if (vecTemp.size() == vecIndex.size())

              vecData.push_back(vecTemp);

     }

    


     if (vecData.size() > 0)

         return true;

     else

         return false;

}



bool CSqlite::GetQueryData(vector<string> &vecColName,vector<string> &vecData)

{

     // 索引

     if (m_iCurIndex >= (int)m_vecData.size())

     {

         m_iCurIndex = 0;

         return false;

     }

    

     vector<int> vecIndex;

     for (int i = 0;i < (int)vecColName.size();i++)

     {

         for (int j = 0;j < (int)m_vecCol.size();j++)

         {

             if (_stricmp(vecColName.at(i).c_str(),m_vecCol.at(j).c_str()) == 0)

             {

                 vecIndex.push_back(j);

                 break;

              }

         }

     }

    

     vecData.clear();

     vector<string> vecItem = m_vecData[m_iCurIndex];

     for (int j = 0;j < (int)vecIndex.size();j++)

     {

         int iIndx = vecIndex[j];

         if (iIndx < (int)vecItem.size())

          {

             vecData.push_back(vecItem[iIndx]);

         }

     }

     m_iCurIndex++;

     if (vecData.size() > 0)

          return true;

     else

         return false;

}

void CSqlite::Close()

{

     if (NULL != m_pDB)

     {

          sqlite3_close(m_pDB);

         m_pDB = NULL;

     }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值