文章目录

  • SQLite3 C++
    • #0 GitHub
    • #1 环境
    • #2 安装sqlite3
    • #3 使用
      • #3.1 基本SQL语句
      • #3.2 sqlite3 API
      • #3.3 Code

SQLite3 C++

#0 GitHub

example代码

SQLite3 C++ Demo Github

#1 环境

macOS
C++14

#2 安装sqlite3

git clone https://github.com/sqlite/sqlite.git
cd sqlite && mkdir bld && cd bld
../configure
make
make sqlite3.c
make test
sudo make install

#3 使用

#3.1 基本SQL语句

#3.2 sqlite3 API

  • 打开数据库
int sqlite3_open_v2(const char *filename,   /* Database filename (UTF-8) */sqlite3 **ppDb,         /* OUT: SQLite db handle */int flags,              /* Flags */const char *zVfs        /* Name of VFS module to use */
);

flags:

flags 说明
SQLITE_OPEN_NOMUTEX 设置数据库连接运行在多线程模式(没有指定单线程模式的情况下)
SQLITE_OPEN_FULLMUTEX 设置数据库连接运行在串行模式
SQLITE_OPEN_SHAREDCACHE 设置运行在共享缓存模式
SQLITE_OPEN_PRIVATECACHE 设置运行在非共享缓存模式
SQLITE_OPEN_READWRITE 指定数据库连接可以读写
SQLITE_OPEN_CREATE 如果数据库不存在,则创建

返回值: 成功/失败

  • 关闭数据库
int sqlite3_close_v2(sqlite3*)
  • 句柄
sqlite3_stmt* stmt = nullptr; // 执行stmt句柄 如果指令能查询到下一行数据,就会返回SQLITE_ROW; 如果指令(例如写入数据)不需要返还数据,就会返还SQLITE_DONE
  • 校验SQL语句合法性
int sqlite3_prepare_v2(sqlite3 *db,            /* Database handle */const char *zSql,       /* SQL statement, UTF-8 encoded */int nByte,              /* Maximum length of zSql in bytes. */sqlite3_stmt **ppStmt,  /* OUT: Statement handle */const char **pzTail     /* OUT: Pointer to unused portion of zSql */
);

返回值: 合法/非法

  • 执行
int sqlite3_step(sqlite3_stmt*)

返回值: 成功/失败

  • 清理语句句柄
int sqlite3_finalize(sqlite3_stmt *pStmt)

返回值: 成功/失败

  • SQL语句
const char* sql_sentence = "select name,age from Persons where age<10";
  • 获取相应数据
API 说明
sqlite3_column_double 浮点数据
sqlite3_column_int 整型数据
sqlite3_column_int64 长整型数据
sqlite3_column_blob 二进制文本数据
sqlite3_column_text 字符串数据

#3.3 Code

#include <iostream>
#include <sqlite3.h>
#include <nlohmann/json.hpp>class SQL3 {public:SQL3() {/*flags:SQLITE_OPEN_NOMUTEX: 设置数据库连接运行在多线程模式(没有指定单线程模式的情况下)SQLITE_OPEN_FULLMUTEX:设置数据库连接运行在串行模式。SQLITE_OPEN_SHAREDCACHE:设置运行在共享缓存模式。SQLITE_OPEN_PRIVATECACHE:设置运行在非共享缓存模式。SQLITE_OPEN_READWRITE:指定数据库连接可以读写。SQLITE_OPEN_CREATE:如果数据库不存在,则创建。* */int result = sqlite3_open_v2(m_path, &m_sql,SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|SQLITE_OPEN_NOMUTEX|SQLITE_OPEN_SHAREDCACHE,nullptr);if (SQLITE_OK == result) {std::cout << "SQLite3 打开成功" << std::endl;} else {std::cout << "SQLite3 打开失败" << std::endl;}}~SQL3(){sqlite3_close_v2(m_sql);}public:void create_table() {const char* sql_sentence = "CREATE TABLE IF NOT EXISTS [Persons] ([name] VARCHAR NOT NULL,[age] INT NULL);";this->exec(sql_sentence);}void insert() {const char* sql_sentence1 = "INSERT INTO Persons(name, age) VALUES('Trunk', 4);";this->exec(sql_sentence1);const char* sql_sentence2 = "INSERT INTO Persons(name, age) VALUES('Master', 6);";this->exec(sql_sentence2);}void update() {const char* sql_sentence = "UPDATE Persons set age=8 where name='Master'";this->exec(sql_sentence);}void del() {const char* sql_sentence = "delete from Persons where name='Master'";this->exec(sql_sentence);}nlohmann::json get() {nlohmann::json data;const char* sql_sentence = "select name,age from Persons where age<10";sqlite3_stmt* stmt = nullptr;int result = sqlite3_prepare_v2(m_sql, sql_sentence, -1, &stmt, nullptr);if (SQLITE_OK == result) {while (SQLITE_ROW == sqlite3_step(stmt)) {const unsigned char* name = sqlite3_column_text(stmt, 0);int age = sqlite3_column_int(stmt, 1);data[(char*)name] = age;}} else {std::cout << "添加数据语句有问题" << std::endl;}sqlite3_finalize(stmt);return data;}
private:int exec(const char* s) {sqlite3_stmt* stmt = nullptr; // 执行stmt句柄 如果指令能查询到下一行数据,就会返回SQLITE_ROW; 如果指令(例如写入数据)不需要返还数据,就会返还SQLITE_DONEint result = sqlite3_prepare_v2(m_sql, s, -1, &stmt, nullptr); // 检查SQL语句的合法性if (SQLITE_OK == result) {sqlite3_step(stmt);} else {std::cout << "添加数据语句有问题" << std::endl;}sqlite3_finalize(stmt); // 清理语句句柄return result;}sqlite3* m_sql = nullptr;         // 一个打开的数据库实例const char* m_path = "../test.db";//某个sql文件的路径};int main() {std::cout << "Hello, SQLite3!" << std::endl;SQL3 sql;sql.create_table();sql.insert();sql.update();
//    sql.del();std::cout << sql.get() << std::endl;return 0;
}

SQLite3 Cpp基本使用相关推荐

  1. linux qt 连接sqlite3,RedHat 9 Linux下在QT3.1中连接SQLite3全过程详细记录

    作者:zieckey([email]zieckey@yahoo.com.cn[/email]) All Rights Reserved 下文介绍的内容都是基于 Linux RedHat 9.0 平台的 ...

  2. SQLite3简单C++包装类源码示例

    一个比较好的SQLite3 C++ wrapper包装类的通常思路是这样的: 数据库连接类,包含连接池,和sqlite3*,负责与数据库文件的连接问题: 一些create table,insert,u ...

  3. linux中sqlite3编译时出错,Sqlite3 交叉编译 undefined reference to `fdatasync' 错误解决

    交叉编译sqlite到Android平台, Android.mk 文件内容如下: LOCAL_PATH:= $(call my-dir) INCDIR:=/home/android-ndk-r6b/s ...

  4. SQLite3单例模式(C++)

    注意:这代码只能在linux底下运行. .h 文件 (我的文件是MySql.h) #ifndef MYSQL_H #define MYSQL_H#include <sqlite3.h> # ...

  5. wxwidgets mysql_Ubuntu下wxWidgets学生公寓管理编程,sqlite3的用法(mysql数据_MySQL

    Ubuntu 以下是学生公寓信息管理的增加和删除,仅供参考.. void StuManaFrame::OnAdd(wxCommandEvent &event) { //add student' ...

  6. SQLite3.8.4.2在Windows平台下的编译和使用

    2019独角兽企业重金招聘Python工程师标准>>> SQLite is a software library that implements a self-contained,  ...

  7. VC连接SQLite3的方法 MFC封装类

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! SQLi ...

  8. linux下sqlite3的应用

    [cpp] view plainco /* ************************************************************************** * F ...

  9. SQLITE3 使用总结(2)[ZT]

    i.2          自己实现加解密接口函数 如果真要我从一份 www.sqlite.org 网上down下来的 sqlite3.c 文件,直接摸索出这些接口的实现,我认为我还没有这个能力. 好在 ...

  10. SQLITE3 使用总结(1)【ZT】

    SQLITE3 使用总结 董淳光 42530 (老工号) dcg1981@163.com 2007年6月11日星期一 前序:... 1 一.       版本... 1 二.       基本编译.. ...

最新文章

  1. python 2x list 里面的中文打印效果为unicode 编码 的处理方法
  2. Python基础11-函数式编程与内置函数
  3. C++11中的Lambda表达式
  4. SeekBar的使用(一):实现OnSeekBarChangListener
  5. 使用AdMob实现广告统一
  6. Type TIMESTAMP(3) of table field ‘onSellTime‘ does not match with the physical type TIMESTAMP(6)
  7. 软件:推荐5款职场人必备的效率神器APP
  8. java程序日期转换_Java 日期转换详解及实例代码
  9. 【Java/Android性能优 7】Android公共库——图片缓存 网络缓存 下拉及底部更多ListView 公共类...
  10. 机器视觉算法与应用001
  11. Java实现Modbus/TCP客户端与modsim通信
  12. MySQL数据库事务实例(模拟银行转账)
  13. ODATA入门:$inlinecount,$top,$skip实现
  14. App数据抓取(Appium使用)
  15. Mybatis根据经度、纬度查询距离最近一个位置(Mysql )
  16. 互联网企业掀起安全大战 各显神通
  17. 淘集集商家入驻?淘集集商家入驻的步骤?
  18. SET的社会工程学攻击方法
  19. 人脸数据集(电视剧生活大爆炸)
  20. 甲虫之王怀旧服新开的服务器是否自动开门,魔兽世界怀旧服:不刷虫皮也能当甲虫之王,钻漏洞可量产黑虫子...

热门文章

  1. html/css椭圆运动
  2. Origin Pro2022教育版官方申请、安装及汉化、续期
  3. 支付宝沙箱集成无法唤起客户端
  4. 菲尼克斯FL SWITCH SFN 16TX多端口交换机
  5. VS1005 功放板
  6. 你画我猜游戏html源代码,微信小程序你画我猜demo完整源码
  7. 时域采样与频域采样实验【matlab】
  8. 变压器高低压侧的电流计算
  9. 思维方式-《策略思维》书中的精髓:生活工作中博弈无处不在,理解博弈论、善用策略思维,能帮助我们做出更好的决策。
  10. 计算机毕业设计Java医院医患管理系统(系统+源码+mysql数据库+Lw文档)