开发者学堂课程【嵌入式之 RFID 开发与应用2020版:SQLite 数据库编程获取数据表达方式分析信息】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/665/detail/11237
SQLite 数据库编程获取数据表达方式分析信息
SQLite数据库编程获取数据表达方式分析信息
另一种方式是 get_table sqlite3_get_table 函数:
int sqlite3_get_table(sqlite3*db,const char *sql,
char***resultp,
int *nrow,
int *ncolumn,
char **errmsg);
sal = "select * from info ; ";
sqlite3_get_table (db , sql , &result, &row , &col , &err) ;
if (err) {
printf ( "err : %s \n" ,err) ;
}
sqlite3_close (db);
return 0;
}
定义 result
int main (int argc , char **argv)
{
sqlite3 *db = NULL;
int ret;char *err =NULL;
char *sql;int row,col ,i;
char **result;
ret =sqlite3_open ( "stu . db " , &db ) ;
if(ret != SQLITE_OK) {
printf ( "open error\n " ) ;
return -1;
}
sal = "select * from info ; ";
sqlite3_get_table (db , sql , &result, &row , &col , &err) ;
if (err) {
printf ( "err : %s \n" ,err) ;
sqlite3_close (db);
return -1;
}
如果出错 return -1;如果没有出错,释放资源
//处理读取到的数据包信息
根据之前的课程,我们知道它的数据是一格一格存储的,这歌表的格数是行乘以列。
for (i=0;i<row*col;i++) {
/将 result 的结果都打印出来
printf ( "result [ %d]= %s \n" ,i ,result[i]);
}
Sqlite3_free_table(result);
sqlite3_close (db);
return 0;
}
执行查看效果:
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 -ld
result[0]= id
result[1]= name
result[2]addr
result[3] = time
result[4] = date
result[5] = 119
result[6]= yy
result[7] = bj
result[8]= (null)
result[9]= (null)
result[10] = 102
result[11] = ls
result[12] = tj
result[13] = (null)
result[14] = (null)
。。。
result[22] = cd
result[23] = (null)
result[24]= (null)
result[25] = 105
result[26]= xw
result[27]= cq
result[28] = (null)
result[29] = (null)
result[30]= 107
result[31] = (null)
result[32] = (null)
result[33] = (null)
result[34] = (null)
result[35]= 108
result[36]= xx
result[37]= ty
result[38]= 08:01:40
result[39]= 2020-04-28
result[40]= 120
result[41]zz
result[42] = ts
result[43] = 09:55:00
result[44]= 2020-04-28
通过以上数据,col 其实是 5,行是 9 行,如果认为以上数据不方便查看,可以在代码中在加入一个 for 循环。
int main (int argc , char **argv)
{
sqlite3 *db = NULL;
int ret;char *err =NULL;
/再加入一个变量 j、定义索引
char *sql;int row,col,i,j,index=0;
char **result;
ret =sqlite3_open ( "stu . db " , &db ) ;
if(ret != SQLITE_OK) {
printf ( "open error\n " ) ;
return -1;
}
sal = "select * from info ; ";
sqlite3_get_table (db , sql , &result, &row , &col , &err) ;
if (err) {
printf ( "err : %s \n" ,err) ;
sqlite3_close (db);
return -1;
}
for (i=0;i<row;i++) {//col=5
printf(“第%d行:\n”,i);
for(j-=0;j<col;j++) {
因为i和j会归零,所以打印不能是i和j,所以要单独定义一个索引
printf ( "result [ %d]= %s \n" ,j ,result[index]);
}
Sqlite3_free_table(result);
sqlite3_close (db);
return 0;
}
运行查看效果:
第 0 行:
result[0]= id
result[1] = name
result[2] = addr
result[3] = time
result[4] = date
第 1 行:
result[0] = 119
result[1] = yy
result[2] = bj
result[3]= (null)
result[4] = (null)
第 2 行:
result[0]= 102
result[1]= ls
result[2]= tj
result[3] = (null)
result[4] = (null)
第 3 行:
result[0] = 110
result[1] = ww
result[2] = sh
result[3] = (null)
result[4] = (null)
通过以上方法,每一行数据单独导出。
以上就是数据库编程,数据库编程在实际过程只比命令行语句应用的更多,更频繁,使用命令行语句并不是最常见的。
一个是跟编程相结合,另外一个是雏形化工具,数据库要快速实行可视化浏览就要使用这个工具。
SQLite 数据库是轻量级的,不仅可以在大型服务器端部署,最关键是可以很容易部署到边缘计算设备中,甚至是一个中端设备中;代码是可见的,移植成本为零,整个源码都给到用户,用户根据自己需求进行编译即可。