原来sqlite3_get_table() 是这样抓取数据的!!!

简介:

在这里插入图片描述
@[toc]

看我的,没后悔啦

①容我重新介绍一下sqlite3_get_teble()函数

和sqlite3_exec()这种使用回调函数的方式不同,sqlite3_get_table()的功能要显得更加直接。它通过控制语句的传入,直接将参数赋值给指针传出。来看一下函数原型:

#include<sqlite3.h>

int sqlite3_get_table(sqlite3* db,char* order,char* **dResult,int *nRow,int *nColnm,char **errmsg);

//参数释义
/*
    db:数据库
    order:控制语句
    **dResult:二维数组
    nRow:查询结果条数
    nColnm:每条结果包含多少数据
    errmsg:报错信息
*/

②从“大数据”中抓取我们需要的数据

在这里插入图片描述
上面是我们的“大数据”(别笑,哈哈哈哈哈)。数据库对象为db,表名叫v_table

Q: 现在,我们要从这组数据中抓取v_id为1001的图片信息(v_pic),怎么办?

A: 查询语句:select v_pic from v_table where v_id = 1001

很简单啊,但是通过sqlite3_get_table()该如何反馈?
这里就要讲一下

**dResult:二维数组
nRow:查询结果条数
nColnm:每条结果包含多少数据

这三个参数。
**dResult是一个二维数组,查询到的结果被存放在这个二维数组中。
这个二维数组是这样安排的:(如果你的查询是:select * from v_table,全部查询)

0~nColnm-1 在这里插入图片描述
nColnm~2nColnm-1 在这里插入图片描述
2nColnm~3nColnm-1 在这里插入图片描述
3nColnm~4nColnm-1 在这里插入图片描述

所以对于上面那个问题,sqlite3_get_table()结果出来之后,取出dResult[nColnm]的值。

Q:如何总所有数据中提取出第三行、第四列的数据?
A:使用select from v_table 查出结果后,返回dResult[3 nColnm+2]的值

再问:

Q:如果要提取第r行、第n列数据,怎么办?

A:返回dResult[r * nColnm +n -1]

Q:就这样?那你可以走了

A:急什么?参数进数组之前,当然要判断一下是否越界啦!!!

r大于nRow否?n大于nColnm否?

最后一问:

Q:如果返回的数据类型不是char*,是int呢?
A:类型强转。碧如是int,就用atoi()函数转换。

最后再说一些:
这个函数的返回值正常是SQLITE_OK(0)

这个函数的报错可以直接打印errmsg。

③让我来给你示范一下

查询表中一个int数据

int DB::ireturn_multi_serch(char *sql, int r, int c)
{
    char *errMsg;
    char **dbResult;
    int nRow = 0, nColumn = 0;
    int rc;

    int result;
    rc = sqlite3_get_table(db,sql,&dbResult,&nRow,&nColumn,&errMsg);
    if(rc == SQLITE_OK && r<=nRow &&r>0 && c<=nColumn &&c>0)
    {
        result = atoi(dbResult[r*nColumn+c-1]);
        sqlite3_free_table(dbResult);
        return result;
    }
    else
    {
        cout<<"第"<<r<<"行,第"<<c<<"条数据无效"<<endl;
        return NULL;
    }
}

最后,如果需要sqlite3动态链接库,可以到我的动态链接库专栏下自取,配详细教程。

在这里插入图片描述

相关文章
|
5月前
|
数据库 数据库管理
sqlite3 插入数据
sqlite3 插入数据
|
6天前
|
存储 API 数据库
QML使用Sqlite数据库存储ListModel数据
本文介绍了在QML中使用Sqlite数据库存储ListModel数据的方法,包括如何创建数据库、读取数据、动态添加和删除数据,以及如何在程序启动和退出时与数据库同步数据。
|
5月前
|
SQL 存储 数据库连接
在Python中使用sqlite3进行数据持久化操作
在Python中使用sqlite3进行数据持久化操作
100 0
|
数据库 Android开发 数据库管理
Android使用Room操作SQLite数据库让其变得无比高效和简洁(进一步完善用RecyclerView显示数据库中的数据)
Android使用Room操作SQLite数据库让其变得无比高效和简洁(进一步完善用RecyclerView显示数据库中的数据)
70 0
|
存储 SQL 数据库连接
SQLite数据库实现数据增删改查
当前文章介绍的设计的主要功能是利用 SQLite 数据库实现宠物投喂器上传数据的存储,并且支持数据的增删改查操作。其中,宠物投喂器上传的数据包括投喂间隔时间、水温、剩余重量等参数。 实现功能: 创建 SQLite 数据库表,用于存储宠物投喂器上传的数据。 实现对数据库表中数据的插入操作,即将从宠物投喂器接收到的数据存储到数据库中。 实现对数据库表中数据的查询操作,包括按照投喂间隔时间、水温、剩余重量等参数进行筛选,以便用户能够查看特定范围内的数据信息。 实现对数据库表中数据的修改操作,即可以修改已经存储的宠物投喂器上传的数据。 实现对数据库表中数据的删除操作,即可以删除已经存储的宠
122 0
|
数据库 Android开发 数据库管理
【Android 逆向】使用 DB Browser 查看并修改 SQLite 数据库 ( 从 Android 应用数据目录中拷贝数据库文件 | 使用 DB Browser 工具查看数据块文件 )
【Android 逆向】使用 DB Browser 查看并修改 SQLite 数据库 ( 从 Android 应用数据目录中拷贝数据库文件 | 使用 DB Browser 工具查看数据块文件 )
750 0
【Android 逆向】使用 DB Browser 查看并修改 SQLite 数据库 ( 从 Android 应用数据目录中拷贝数据库文件 | 使用 DB Browser 工具查看数据块文件 )
|
数据库连接 程序员 C#
C#(WPF)连接SQLite数据库,利用ViewModel显示数据
对于入门c#(WPF)的初级程序猿
1441 0
C#(WPF)连接SQLite数据库,利用ViewModel显示数据
|
Android开发 数据库管理
Android SQLite 使用 query 查询特定行数据
Android SQLite 使用 query 查询特定行数据
Android SQLite 使用 query 查询特定行数据
|
存储 Oracle 关系型数据库
数据火器库 - 八卦系列之瑞士军刀: 随APP携带的SQLite
来源:云数据库技术,数据库打工仔喃喃自语的八卦历史,1. 为导弹巡洋舰设计,用在手机上的数据库,2. Small and Simple, and Better,3. 如何看出是自己的娃:产品定位,特点和边界
210 0
数据火器库 - 八卦系列之瑞士军刀: 随APP携带的SQLite