当前位置: 首页 > news >正文

sqlite3的使用

sqlite3的使用

splite.hpp

/*封装实现一个sqliteHelper类,提供简单的sqlite数据库接口,完成数据的基础增删改查操作1.创建/打开数据库2.针对打开的数据库进行操作1.表的操作2.数据的操作3.关闭数据库
*/#include <iostream>
#include <string>
#include <vector>
#include <sqlite3.h>class SqliteHelper
{public:typedef int(*SqliteCallback)(void*,int ,char**,char**);SqliteHelper(const std::string &dbfile):_dbfile(dbfile),_handler(nullptr){}bool open(int safe_level=SQLITE_OPEN_FULLMUTEX){//int sqlite3_open_v2(const char *filename, sqlite3 **ppDb, int flags, const char *zVfs );int ret=sqlite3_open_v2(_dbfile.c_str(),&_handler,SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | safe_level,nullptr);if(ret!=SQLITE_OK){std::cout<<"创建/打开sqlite数据库失败";std::cout<<sqlite3_errmsg(_handler)<<std::endl;return false;}return true;}bool exec(const std::string &sql,SqliteCallback cb,void *arg){//int sqlite3_exec(sqlite3*, char *sql, int (*callback)(void*,int,char**,char**),  void* arg, char **err)int ret=sqlite3_exec(_handler,sql.c_str(),cb,arg,nullptr);if(ret!=SQLITE_OK){std::cout<<sql<<std::endl;std::cout<<"执行语句失败!";std::cout<<sqlite3_errmsg(_handler)<<std::endl;return false;}return true;}void close(){// int sqlite3_close_v2(sqlite3*)if(_handler) sqlite3_close_v2(_handler);}private:std::string _dbfile;sqlite3* _handler;
};

main.cc

#include "sqlite.hpp"
#include <cassert>int select_stu_callback(void*arg,int col_count,char**result,char**fields_name)
{std::vector<std::string> *arry=(std::vector<std::string>*)arg;arry->push_back(result[0]);return 0;//必须有!
}
int main()
{SqliteHelper helper("./test.db");//1.打开/创建库文件assert(helper.open());//2.创建表,学生信息:学号,姓名,年龄const char* ct="create table if not exists student(sn int primary key,name varchar(32),age int)";assert(helper.exec(ct,nullptr,nullptr));//3.新增数据,删除,修改,查询//const char* insert_sql="insert into student values(1,'小明',18),(2,'小黑',19),(3,'小红',18)";//assert(helper.exec(insert_sql,nullptr,nullptr));//const char *update_sql="update student set name ='张小明' where sn=1";//assert(helper.exec(update_sql,nullptr,nullptr));//const char *delete_sql="delete from student where sn=3";//assert(helper.exec(delete_sql,nullptr,nullptr));const char *select_sql="select name from student ;";std::vector<std::string> arry;assert(helper.exec(select_sql,select_stu_callback,&arry));for(auto &name: arry){std::cout<<name<<std::endl;}//4.关闭数据库helper.close();return 0;
}

makefile

main:main.ccg++ -std=c++11 $^ -o $@ -lsqlite3

文章转载自:

http://slJIBj2R.bwttp.cn
http://b8CbajDk.bwttp.cn
http://wAtqU20C.bwttp.cn
http://yMwTM55J.bwttp.cn
http://MHFtolgj.bwttp.cn
http://OgoAuvP0.bwttp.cn
http://aita11iM.bwttp.cn
http://gV8SvDXa.bwttp.cn
http://wTeVWljW.bwttp.cn
http://UpOvp4kW.bwttp.cn
http://uqa7f4F4.bwttp.cn
http://ojtzgqz1.bwttp.cn
http://tbw4lnia.bwttp.cn
http://cs7ou3XD.bwttp.cn
http://d1kRE5OB.bwttp.cn
http://dylU9et0.bwttp.cn
http://cLkspWQg.bwttp.cn
http://Rv46agz9.bwttp.cn
http://orufKjwH.bwttp.cn
http://V8unQsH5.bwttp.cn
http://Uxw6a04s.bwttp.cn
http://hWA3b8j5.bwttp.cn
http://ZirDfPbe.bwttp.cn
http://cuYw4u0V.bwttp.cn
http://yw7HFFTR.bwttp.cn
http://ilGOcMso.bwttp.cn
http://SgoixIdX.bwttp.cn
http://PiDEOepm.bwttp.cn
http://rHGxbCBa.bwttp.cn
http://UtZUutey.bwttp.cn
http://www.dtcms.com/a/373055.html

相关文章:

  • LeetCode Hot 100 Python (81~90)
  • LeetCode 面试经典 150 题:删除有序数组中的重复项(双指针思想解法详解)
  • apifox的post的表单提交的gbk的解决方案
  • leetcode算法刷题的第二十九天
  • 绿联科技全球化突围:业财一体化如何打通全球电商全链路数字化
  • golang-gin包
  • SpringAI调用MCP服务的实现思路
  • react16到react19更新及底层实现是什么以及区别
  • K-meas 聚类、KNN算法、决策树、随机森林
  • Day 17: 3D点云深度学习专项 - 理论深度与面试精通之路
  • React中的合成事件
  • 不连续页分配器补充
  • Hadoop NameNode内存泄漏与GC停顿问题排查与解决方案
  • 防火墙配置
  • Hydra-SSH 破解安全防范
  • Hadoop(十)
  • C++三种对象实例化在栈或堆的区别
  • 碰一碰系统源码于小程序打通技术开发整合方案,驱动AI技术开发源代码
  • 深入解析TCP核心机制:连接管理、流量与拥塞控制
  • 【混合开发】vue+Android、iPhone、鸿蒙、win、macOS、Linux之dist打包发布在Android工程asserts里
  • 医疗问诊陪诊小程序:以细节创新重塑就医体验的温度与效率
  • [20250908]Android Talkback 自定义合并
  • 【智能融合:增材制造多物理场AI建模与工业应用实战】
  • stm32——独立看门狗,RTC
  • LeetCode 3634.使数组平衡的最少移除数目
  • 106. 从中序与后序遍历序列构造二叉树【中等】
  • 基于OpenCV的银行卡号识别系统:从原理到实现
  • Linux 可信启动深度解析:从UEFI到操作系统的信任链
  • OpenCV 开发 -- 图像基本处理
  • C++从字符串中移除前导零(二)