SQLite 数据库编程回调方式获取数据表信息 | 学习笔记

简介: 快速学习 SQLite 数据库编程回调方式获取数据表信息

开发者学堂课程【嵌入式之 RFID 开发与应用2020版:SQLite 数据库编程回调方式获取数据表信息】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/665/detail/11236


SQLite 数据库编程回调方式获取数据表信息

SQLite数据库编程回调方式获取数据表信息

一般是使用编程,使用语句操作是为了编程而如此操作。

首先是创建一个表,在代码中就不再创建表,其实在代码中创建时一样的,但是不能重复创建,直接操作已有的 stu.Db 表

sqlite> select * from info;

id     name    addr     time    date

----   --------  -------  --------  -------

119     yy      bj

102     ls       tj

110     ww     sh

104     zs       cd

105     xw      cq

107

108     xx       ty    08:01:40   2020-04-28

创建代码:

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include "sqlite3. h"

int main (int argc, char **argv)

{

/定义句柄并将地址传入

Sqlite3 *db=null

Int ret;char *err=null;

Ret=sqlite3_open ("stu.dp" ,&db) ;

/对结果进行判断

ret =sqliste3_open( " stu. db" , &db) ;

if (ret != SQLITE_OK) {

printf ( "open error\n " );

return -1;

}

/定义指针 err,将错误信息传入

sqlite3_exec(db , sql ,NULL,NULL, &err);

如果指针为 null,无错误;如果不为空,打印错误

if(err){

printf ( "err : %s \n" ,err) ;

}

sqlite3_close (db ) ;

return 0;

}

现在关键是如何打开数据库,需要定义指针,数组不容易赋值,数组要在定义时就要完成赋值,否则就只能copy值。

Sql 指针可以指向任何一个字符串

{

Sqlite3 *db=null

Int ret;char *err=null;

Char *sql;

Ret=sqlite3_open ("stu.dp" ,&db) ;

ret =sqliste3_open( " stu. db" , &db) ;

if (ret != SQLITE_OK) {

printf ( "open error\n " );

return -1;

}

/执行插入操作

sql ="insert into info

values(120,’zz’,’ts’,time(‘now’)) " ;

sqlite3_exec(db , sql ,NULL,NULL, &err);

if(err){

printf ( "err : %s \n" ,err) ;

}

sqlite3_close (db ) ;

return 0;

}

在窗口编写代码;

edu@edu : sqlite$ make

gcc -c example.c -o example.o -wall

gcc example.o sqlite3.o -o example -wall -lpthread -ldl

edu@edu : sqlite$make

gcc -c example.c -o example.o -Wall

gcc example.o sqlite3.o -o example -wall -lpthread -ldl

edu@edu : sqlite$ ./example

进行查看:

sqlite> select * from info;

id     name    addr     time    date

----   --------  -------  --------  -------

119     yy      bj

102     ls       tj

110     ww     sh

104     zs       cd

105     xw      cq

107

108     xx       ty    08:01:40   2020-04-28

120     zz       ts    09:55:00  2020-04-28

表示刚新增的信息完成,相当于两个进程同时操作这个数据库,一边是通过命令行操作,一边是通过编写的程序操作

在很多时候是在进行查询操作,更改代码:

/回调函数

int loadinfo (void *data,int col, char **val , char **name)

{

/在回调函数中,打印参数是否等于%的的 \n

printf ( "arg = %d\n ",*(int *) data) ;

printf ( " col = %d \n" ,col);

return SQLITE_OK;

}

int main (int argc , char **argv)

{

Sqlite3 *db=null

Int ret;char *err=null;

Char *sql;int arg=33;

Ret=sqlite3_open ("stu.dp" ,&db) ;

ret =sqliste3_open( " stu. db" , &db) ;

if (ret != SQLITE_OK) {

printf ( "open error\n " );

return -1;

}

sql ="select * from info;" ;

/将回调函数传入

sqlite3_exec(db , sql ,loadinfo,&arg &err);

if(err){

printf ( "err : %s \n" ,err) ;

}

sqlite3_close (db ) ;

return 0;

}

验证是否能跑通:

edu@edu : sqlite$make; ./example

gcc -c example.c -o example.o -wall

gcc example.o sqlite3.o -o example -wall -lpthread -ldl

arg = 33

col = 5

arg = 33

col = 5

arg = 33

col = 5

arg = 33

col = 5

arg = 33

col = 5

arg = 33

col = 5

arg = 33

col = 5

arg = 33

col = 5

arg = 33

col = 5

传过去的参数是 33,打印了多次 5 行,以方法不方便查看传了多少次,所以:

int loadinfo (void *data,int col, char **val , char **name)

{

Static int row = 1

printf ( " row= %d \n" ,row++);

return SQLITE_OK;

} 

edu@edu : sqlite$make; ./example

gcc -c example.c -o example.o -Wall

gcc example.o sqlite3.o -o example -wall -lpthread -ldl

row = 1

row = 2

row =3

row = 4

row = 5

row = 6

row = 7

row = 8

row = 9

接下来,具体将值提取出来,怎样提取,拿到的有 val,直接打印:

int loadinfo (void *data,int col,char **val, char **name)

{

static int row = 1 ;int i ;

printf ( "row = %d \n" ,row++);

for (i=0 ;i<col;i++){

printf("%s=%s \n" , name [i] ,val[i]) ;

}

return SQL工TE_OK;

运行:edu@edu : sqlite$

edu@edu : sqlite$make; ./example

gcc -c example.c -o example.o -wall

gcc example.o sqlite3.o -o example -wall -lpthread -ldl

row = 1

id = 119

name = yy

addr = bj

time = (null)

date = (null)

row = 2

id = 102

name = ls

addr = tj

time = (null)

date = (null)

row = 3

id=110

以上就是通过 select 语句回调的方法来遍历返回的每一行数据。

相关文章
|
3月前
|
安全 Java 数据库
Jasypt加密数据库配置信息
本文介绍了使用 Jasypt 对配置文件中的公网数据库认证信息进行加密的方法,以提升系统安全性。主要内容包括:1. 背景介绍;2. 前期准备,如依赖导入及版本选择;3. 生成密钥并实现加解密测试;4. 在配置文件中应用加密后的密码,并通过测试接口验证解密结果。确保密码安全的同时,保障系统的正常运行。
283 3
Jasypt加密数据库配置信息
|
5月前
|
SQL 数据库连接 数据库
在C++的QT框架中实现SQLite数据库的连接与操作
以上就是在C++的QT框架中实现SQLite数据库的连接与操作的基本步骤。这些步骤包括创建数据库连接、执行SQL命令、处理查询结果和关闭数据库连接。在实际使用中,你可能需要根据具体的需求来修改这些代码。
295 14
|
7月前
|
JSON Java 关系型数据库
Hutool创建数据源工厂动态查询不同数据库不同数据表的数据
Hutool创建数据源工厂动态查询不同数据库不同数据表的数据
165 2
|
9月前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
962 15
|
9月前
|
NoSQL 关系型数据库 分布式数据库
基于PolarDB的图分析:通过DTS将其它数据库的数据表同步到PolarDB的图
本文介绍了使用DTS任务将数据从MySQL等数据源实时同步到PolarDB-PG的图数据库中的步骤.
|
10月前
|
存储 SQL 数据库
数据库知识:了解SQLite或其他移动端数据库的使用
【10月更文挑战第22天】本文介绍了SQLite在移动应用开发中的应用,包括其优势、如何在Android中集成SQLite、基本的数据库操作(增删改查)、并发访问和事务处理等。通过示例代码,帮助开发者更好地理解和使用SQLite。此外,还提到了其他移动端数据库的选择。
234 8
|
10月前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
4617 2
|
11月前
|
缓存 数据库 数据安全/隐私保护
Discuz! X 数据库字典详解:DZ各数据表作用及字段含义
我们使用DISCUZ做网站时,有时需要对数据表进行操作,在操作数据表之前,需要对数据表进行了解。下面是DISCUZ 数据库各数据表作用及字段含义详解,方便新手更好的了解DISCUZ数据库。
203 4
|
11月前
|
Web App开发 SQL 数据库
使用 Python 解析火狐浏览器的 SQLite3 数据库
本文介绍如何使用 Python 解析火狐浏览器的 SQLite3 数据库,包括书签、历史记录和下载记录等。通过安装 Python 和 SQLite3,定位火狐数据库文件路径,编写 Python 脚本连接数据库并执行 SQL 查询,最终输出最近访问的网站历史记录。
213 4
|
11月前
|
存储 缓存 关系型数据库
sqlite 数据库 介绍
sqlite 数据库 介绍
296 0