使用 sqlite 小结

来源:互联网 发布:windows ce最新版本 编辑:程序博客网 时间:2024/04/30 11:44
  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 Connect(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;    int m_iCurIndex;};
#include "Sqlite.h"#include <stdlib.h>#include <string.h>CSqlite::CSqlite(void){    m_pDB = NULL;    m_iCurIndex = 0;}CSqlite::~CSqlite(void){    Close();}int CSqlite::Connect(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();    m_iCurIndex = 0;    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<string> &vecData){    vecData.clear();    // 索引    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 (strcmp(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;}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 (strcmp(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;}void CSqlite::Close(){    if (NULL != m_pDB)    {        sqlite3_close(m_pDB);        m_pDB = NULL;    }}
0 0