【MQTT】在Linux下sqlite3的使用

安装sqlite3

#下载
wget https:
#解压
tar -xzvf sqlite-autoconf-3310100.tar.gz

sqlite3库函数

1. 打开/创建数据库

int sqlite3_open(const char *dbname,sqlite3 **db)
参数说明:
第一个参数dbname是数据库的名称;
第二个参数db是用于保存打开的数据库文件dbname的信息。

2. 关闭数据库

int sqlite3_close(sqlite3  *db)
参数说明:db需要关闭的数据库文件。

3. 执行sqlite3语句

int sqlite_exec(sqlite  *db, const char *sql, int (*callback)(void *int,char **,char **),void *,char **errmsg);

参数说明:
第一个参数:db是用于保存打开的数据库文件dbname的信息;
第二个参数:sql你要执行命令的语句;
第三个参数:callback回调函数,当这条语句执行之后,sqlite3会去调用你提供的这个函数。通常设为NULL;
第四个参数:void *是你所提供的指针,你可以传递任何一个指针参数到这里,这个参数最终会传到回调函数里面,如果不需要传递指针给回调函数,可以填NULL。
第五个参数:是错误信息。

说明:说明:通常,sqlite3_callback和它后面的void*这两个位置都可以填NULL。填NULL表示你不需要回调。比如你做insert 操作,做delete操作,就没有必要使用回调。而当你做select 时,就要使用回调,因为sqlite3 把数据查出来,得通过回调告诉你查出了什么数据。虽然回调显得代码整齐,但有时候你还是想要非回调的select查询。这可以通过sqlite3_get_table 函数做到。

4. 执行sqlite3的查询功能

int sqlite3_get_table(sqlite3 *db, const char *zsql,char ***pazResult, int *nrow, int *ncolumn,char **zErrmsg);

参数说明:
第一个参数db:db是用于保存打开的数据库文件dbname的信息;
第二个参数:sqlite3的语句,跟sqlite3_exec里的sql是一样的,是一个很普通的以\0结尾的char *字符串。
第三个参数:查询的结果,它依然是一维数组,他的内存布局时:字段名称,后面时紧接着是每个字段值。
第四个参数:是查询出多少条记录(即查出是多少行,不包括字段名那行)
第五个参数:是多少个字段(多少列)
第六个参数:是错误信息

注意:如果提供了errmsg,用来创建错误消息的内存是在堆上分布的,故在调用后,应该检查一下是否为null值,如果有错误发生,使用sqlite3_free()释放errmsg占用的内存。

代码实现

#include
#include "sqlite3.h"

int db_init(sqlite3  *db,char *zErrMsg)
{
    int         len;

    len = sqlite3_open("temper.db",&db);
    if (len != SQLITE_OK)
    {
        printf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
        sqlite3_close(db);
        exit(1);
    }
    else
    {
        printf("You have opened a sqlite3 database named temper.db successfully!\n");
    }
}

int db_table(char *zErrMsg, sqlite3 *db)
{
    int         ret;

    char        *sql = "create table if not exists temperature(ipaddr char(30), datetime char(50), temperature  char(30))";

    datasql = sqlite3_exec(db,sql,0,0,&zErrMsg);
    if(datasql != SQLITE_OK)
    {
        sqlite3_close(db);
        printf("Creat table failure \n");
        return 0;
    }
    printf("Table created successfully!\n");
    printf("Now ready to connect the client and recive message from client...\n");
    printf("\n");
    sqlite3_close(db);
}

int db_store(sqlite3 *db,char *zErrMsg)
{
    char        sql1[128];
    int         ret;

    snprintf(sql1, 128, "insert into temperature values('%s', '%s', '%f');", ipaddr, datetime, temper);

    sql1[127] = '\0';
    printf("%s\n", sql1);

    ret = sqlite3_exec(db, sql1, 0 , 0, &zErrMsg);
    if (ret != SQLITE_OK)
    {
        sqlite3_close(db);
        printf("insert data failure:%s!\n", zErrMsg);
        return 0;
    }
    printf("insert data successfully!\n");
    sqlite3_close(db);
}

Original: https://www.cnblogs.com/Ye-Wei/p/16728605.html
Author: 西故黄鹤楼
Title: 【MQTT】在Linux下sqlite3的使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/606334/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 【小记】腾讯云 Linux 虚拟机如何正确修改 hosts 文件

    如果直接修改 /etc/hosts 文件,重启后设置会丢失还原,原因是腾讯云虚拟机默认使用了 Cloud-Init 进行初始化操作。 参见:https://cloud.tencen…

    Linux 2023年6月13日
    083
  • python串口助手

    最近项目中要使用模拟数据源通过向外发送数据,以前都是用C#编写,最近在研究python,所以就用python写了一个串口助手,方便以后的测试。 在电脑上通过虚拟串口助手产生两个虚拟…

    Linux 2023年6月14日
    092
  • Linux——配置主从数据库服务

    主从数据库 Linux中,数据库服务有三种:互为主主,互为主从,一主一从(主从数据库) 服务名 mariadb 协议名 mysql 进程名称 mysqld 端口号 3306 一、改…

    Linux 2023年5月27日
    0102
  • Ansible—Inventory主机清单

    含义 清查;存货清单;财产目录;主机清单 1、增加主机组 官方链接 http://docs….

    Linux 2023年6月6日
    096
  • EhCache缓存页面、局部页面和对象缓存

    页面缓存:SimplePageCachingFilter web.xml <filter> <filter-name>PageEhCacheFilterfi…

    Linux 2023年6月13日
    093
  • [Git系列] Git 基本概念

    版本控制系统 版本控制系统是一种帮助软件开发人员实现团队协作和历史版本维护的软件。版本控制系统应具备以下基本功能: [En] Version control system is a…

    Linux 2023年5月27日
    089
  • CentOS7下安装python3.7

    以原码编译的方式安装 1.官网下载python3.7软件包 2.上传至Linux中,并解压 tar -zxvf python-3.7.2.tgz 3.安装gcc和python所需依…

    Linux 2023年6月6日
    077
  • Python中str()和repr()的区别

    其实用处就是最大的区别了:str()主要用来为终端用户输出一些信息,而repr()主要用来调试;同时后者的目标是为了消除一些歧义(例如浮点数的精度问题),前者主要为了可读。 In …

    Linux 2023年6月8日
    0101
  • Golang 实现 Redis(4): AOF 持久化与AOF重写

    AOF 持久化是典型的异步任务,主协程(goroutine) 可以使用 channel 将数据发送到异步协程由异步协程执行持久化操作。 在 DB 中定义相关字段: type DB …

    Linux 2023年5月28日
    090
  • 从Windows备份文件到Linux服务器

    各种深坑 尝试1—FTP 因为组内有FTP服务器,所以尝试用bat编写把文件压缩后放到FTP上。其中压缩使用7zip.exe来完成,定时任务使用windows自带的定时任务。 整个…

    Linux 2023年6月8日
    0109
  • 一劳永逸,解决.NET发布云服务器的时区问题

    国内大多数开发者使用的电脑,都是使用的北京时间,日常开发的过程中其实并没有什么不便;不过,等遇到了阿里云等云服务器,系统默认使用的时间大多为 UTC时间,这个时候,时区和时间的问题…

    Linux 2023年6月6日
    084
  • 【V4L2】V4L2框架浅析

    概述 V4L2(Video4Linux的缩写)是Linux下关于视频采集相关设备的驱动框架,为驱动和应用程序提供了一套统一的接口规范。 V4L2支持的设备十分广泛,但是其中只有很少…

    Linux 2023年6月13日
    0107
  • 用python去除SQL中的注释

    我的博客在看到这个标题时候肯定有人会想,我写SQL直接在数据库工具上执行就行了啊,工具会自动识别注释的,就是不用工具,把SQL写到存储过程里,数据库也会识别注释不执行的,干嘛非要去…

    Linux 2023年6月6日
    086
  • 【微服务】Nacos初体验

    SpringCloud – Nacos初体验 😄生命不息,写作不止🔥 继续踏上学习之路,学之分享笔记👊 总有一天我也能像各位大佬一样🏆 一个有梦有戏的人 @怒放吧德德🌝…

    Linux 2023年6月6日
    0101
  • 常见的Redis面试”刁难”问题,值得一读

    字符串String、字典Hash、列表List、集合Set、有序集合SortedSet。 如果你是Redis中高级用户,还需要加上下面几种数据结构HyperLogLog、Geo、P…

    Linux 2023年5月28日
    078
  • 解决“WARNINGThe remote SSH server rejected X11 forwarding request.“警告

    使用xshell连接服务器时,出现了”WARNING! The remote SSH server rejected X11 forwarding request.&#…

    Linux 2023年5月27日
    081
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球