C++使用sqlite3操作数据库 您所在的位置:网站首页 调用数据库函数 C++使用sqlite3操作数据库

C++使用sqlite3操作数据库

2023-11-09 23:19| 来源: 网络整理| 查看: 265

        在《VS2019下Sqlite3数据库的环境搭建及简单应用》,这篇中描述了第三方sqlite3库的环境配置和简单使用,重新整理下操作类的逻辑;

​        其实就是增删改查。

一、代码实现

         基本功能实现如下:

// WSqlite.h #ifndef WSQLITE_H_ #define WSQLITE_H_ #include #include #include #include "sqlite3.h" #pragma comment(lib, "sqlite3.lib") using namespace std; class WSqlite { public: WSqlite(); ~WSqlite(); int CreateDbFile(const string &path); // 创建数据库文件 int CreateTable(const string& sqlCreatetable); // 创建数据库表 int Opendb(const string& path); // 连接数据库 int Insert(const string& sqlInsert); // 增 int Delete(const string& sqlDelete); // 删 int Update(const string& sqlUpdate); // 改 int QueryData(const string& sqlQuery, vector &arrKey, vector &arrValue); // 查 private: sqlite3* pDb = NULL; private: //sqlie对象的销毁放在析构里,不需要用户关心 void Destory(); }; #endif // WSqlite.cpp #include #include #include #include #include "sqlite3.h" #include "WSqlite.h" using namespace std; #pragma comment(lib, "sqlite3.lib") WSqlite::WSqlite(){ pDb = NULL; } WSqlite::~WSqlite(){ Destory(); } void WSqlite::Destory() { if (pDb) { sqlite3_close(pDb); pDb = NULL; } } int WSqlite::CreateDbFile(const string& path) { return sqlite3_open(path.c_str(), &pDb); } int WSqlite::CreateTable(const string& sqlCreatetable) { char* szMsg = NULL; return sqlite3_exec(pDb, sqlCreatetable.c_str(), NULL, NULL, &szMsg); } int WSqlite::Opendb(const string& path) { return sqlite3_open(path.c_str(), &pDb); } int WSqlite::Insert(const string& sqlInsert) { if (sqlInsert.empty()) { return -1; } char* zErrMsg = NULL; int ret = sqlite3_exec(pDb, sqlInsert.c_str(), NULL, NULL, &zErrMsg); if (zErrMsg) { sqlite3_free(zErrMsg); } return ret; } int WSqlite::Delete(const string& sqlDelete) { int nCols = 0; int nRows = 0; char** azResult = NULL; char* errMsg = NULL; int res = sqlite3_get_table(pDb, sqlDelete.c_str(), &azResult, &nRows, &nCols, &errMsg); if (res != SQLITE_OK) { return false; } if (azResult) { sqlite3_free_table(azResult); } if (errMsg) { sqlite3_free(errMsg); } return true; } int WSqlite::Update(const string& sqlUpdate) { char* zErrMsg = NULL; int ret = sqlite3_exec(pDb, sqlUpdate.c_str(), NULL, NULL, &zErrMsg); if (zErrMsg) { sqlite3_free(zErrMsg); } return ret; } int WSqlite::QueryData(const string& sqlQuery, vector& arrKey, vector& arrValue) { if (sqlQuery.empty()) { return -1; } int nCols = -1; int nRows = -1; char** azResult = NULL; char* errMsg = NULL; int index = 0; const int ret = sqlite3_get_table(pDb, sqlQuery.c_str(), &azResult, &nRows, &nCols, &errMsg); index = nCols; arrKey.clear(); arrKey.reserve(nCols);// 改变容器容量,避免内存重新分配 arrValue.clear(); arrValue.reserve(nRows); bool bKeyCaptured = false; for (int i = 0; i < nRows; i++) { vector temp; for (int j = 0; j < nCols; j++) { if (!bKeyCaptured) { arrKey.push_back(azResult[j]); } temp.push_back(azResult[index]); index++; } bKeyCaptured = true; arrValue.push_back(temp); } if (azResult) { sqlite3_free_table(azResult); } if (errMsg) { sqlite3_free(errMsg); } return ret; } 二、测试验证 2.1 数据格式

dbName: run.db;

sheetName: myfriends; 

IDNameAgeMajor1xiaohuoche9sing2xiaoshuai8dance3xiaomei7rap 2.2 测试函数

2.2.1 创建数据库文件和表格

void crteateTable() { // 获取path char buffer[MAX_PATH]; _getcwd(buffer, MAX_PATH); string path = buffer; path += "\\run.db"; cout


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有