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 语句回调的方法来遍历返回的每一行数据。

相关文章
|
2月前
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
133 6
|
2月前
|
SQL Ubuntu 关系型数据库
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
本文为MySQL学习笔记,介绍了数据库的基本概念,包括行、列、主键等,并解释了C/S和B/S架构以及SQL语言的分类。接着,指导如何在Windows和Ubuntu系统上安装MySQL,并提供了启动、停止和重启服务的命令。文章还涵盖了Navicat的使用,包括安装、登录和新建表格等步骤。最后,介绍了MySQL中的数据类型和字段约束,如主键、外键、非空和唯一等。
74 3
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
|
1月前
|
存储 SQL 数据库
数据库知识:了解SQLite或其他移动端数据库的使用
【10月更文挑战第22天】本文介绍了SQLite在移动应用开发中的应用,包括其优势、如何在Android中集成SQLite、基本的数据库操作(增删改查)、并发访问和事务处理等。通过示例代码,帮助开发者更好地理解和使用SQLite。此外,还提到了其他移动端数据库的选择。
32 8
|
2月前
|
Web App开发 SQL 数据库
使用 Python 解析火狐浏览器的 SQLite3 数据库
本文介绍如何使用 Python 解析火狐浏览器的 SQLite3 数据库,包括书签、历史记录和下载记录等。通过安装 Python 和 SQLite3,定位火狐数据库文件路径,编写 Python 脚本连接数据库并执行 SQL 查询,最终输出最近访问的网站历史记录。
|
2月前
|
存储 关系型数据库 数据库
轻量级数据库的利器:Python 及其内置 SQLite 简介
轻量级数据库的利器:Python 及其内置 SQLite 简介
|
2月前
|
应用服务中间件 PHP Apache
PbootCMS提示错误信息“未检测到您服务器环境的sqlite3数据库扩展...”
PbootCMS提示错误信息“未检测到您服务器环境的sqlite3数据库扩展...”
|
3月前
|
存储 API 数据库
QML使用Sqlite数据库存储ListModel数据
本文介绍了在QML中使用Sqlite数据库存储ListModel数据的方法,包括如何创建数据库、读取数据、动态添加和删除数据,以及如何在程序启动和退出时与数据库同步数据。
|
3月前
|
数据库 数据库管理
qt对sqlite数据库多线程的操作
本文总结了在Qt中进行SQLite数据库多线程操作时应注意的四个关键问题,包括数据库驱动加载、加锁、数据库的打开与关闭,以及QsqlQuery变量的使用。
176 1
|
2月前
|
存储 缓存 关系型数据库
sqlite 数据库 介绍
sqlite 数据库 介绍
40 0
|
7月前
|
存储 数据库连接 数据库
Android数据存储:解释SQLite数据库在Android中的使用。
Android数据存储:解释SQLite数据库在Android中的使用。
86 0