使用 sqlite 小结
来源:互联网 发布:windows ce最新版本 编辑:程序博客网 时间:2024/04/30 11:44
- 去官网下载:http://www3.sqlite.org/download.html
- 创建数据库和表 :http://www3.sqlite.org/cli.html ,linux 和 windows 环境是不一样的
- 示例代码 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
- SQLite使用小结
- SQLite使用小结
- SQLite使用小结1
- sqlite使用小结2
- sqlite使用小结3
- sqlite使用小结4
- SQLite使用小结 2
- SQLite使用小结 1
- SQLite使用小结
- SQLite使用小结
- SQLite使用小结
- SQLite使用小结
- 使用 sqlite 小结
- SQLite数据库使用小结
- SQLite使用小结
- SQLite使用小结
- c# 连接SQLite及SQLite使用小结
- Android SQLite数据库使用小结
- Spring DI和IoC区别
- C++ tips: C++ Dark Corner 0 标准流格式化输出
- 修改 添加 service_name
- GitHub 上排名前 100 的 Objective-C 项目简介
- VMWare中Ubuntu设置固定IP上网
- 使用 sqlite 小结
- cocos2dx 按钮重复渐变效果的实现
- layoutSubviews的使用浅谈
- ASP.net MVC4 AsyncController异步action无法异步执行?
- Ubuntu VIM 插件安装
- 联想笔记本电脑回收站清空的文件还能找回吗
- unity3d ngui 利用 UIAtlas 动态创建 UISprite
- 一个无边框带默认标题栏的widget
- 119 Nginx和Tomcat负载均衡实现session共享