当前位置:   article > 正文

嵌入式linux下sqlite3数据库操作_arm linux sqlite demo

arm linux sqlite demo
query.c
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include "sqlite3.h"
  5. #define _DEBUG_
  6. int main( void )
  7. {
  8. int i = 0 ;
  9. int nrow = 0, ncolumn = 0;
  10. char **azResult; //二维数组存放结果
  11. sqlite3 *db=NULL;
  12. char *zErrMsg = 0;
  13. char value[200];
  14. int id=10;
  15. int ip=19;
  16. int rc;
  17. rc = sqlite3_open("aa.db", &db);//打开指定的数据库文件,如果不存在将创建一个同名的数据库文件
  18. if( rc )
  19. {
  20. fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
  21. sqlite3_close(db);
  22. exit(1);
  23. }
  24. else printf("You have opened a sqlite3 database named zieckey.db successfully!nCongratulations! Have fun ! ^-^ n");
  25. //创建数据表
  26. rc = sqlite3_exec(db,"create table mytable(id,ip);",NULL,NULL,zErrMsg);
  27. //插入数据
  28. memset(value,0,200);
  29. //sprintf(value, "update tbl set id=%d,ip=%d",id,ip);//更新
  30. sprintf(value, "insert into mytable(id,ip) values(%d,%d)",id,ip);//插入
  31. sqlite3_exec(db,value,NULL,NULL,zErrMsg);
  32. //查询数据
  33. sqlite3_get_table( db , "SELECT * FROM mytable ", &azResult , &nrow , &ncolumn , &zErrMsg );
  34. printf( "row:%d column=%d \n" , nrow , ncolumn );
  35. printf( "The result of querying is : \n" );
  36. for( i=ncolumn ; i<( nrow + 1 ) * ncolumn ; i++ )
  37. printf( "azResult[%d] = %s\n", i-ncolumn , azResult[i] );
  38. //释放掉 azResult 的内存空间
  39. sqlite3_free_table( azResult );
  40. #ifdef _DEBUG_
  41. printf("zErrMsg = %s \n", zErrMsg);
  42. #endif
  43. sqlite3_close(db); //关闭数据库
  44. return 0;
  45. }

编译的时候要加上-lsqlite3,指定链接库。(gcc编译只需加-lsqlite3,arm-linux-gcc编译时除此之外还要添加-I /usr/include -L /home/sqlite3_test)

sqlite需要的库文件libsqlite3.so、libsqlite3.so.0、libsqlite3.so.0.8.6放在/home/sqlite3_test目录下,这三个库文件和虚拟机下的名字虽相同,却不能用,一定要是嵌入式移植的库文件。

程序最后运行结果为


上面是sqlite3数据库的基本操作(打开创建数据库,建立数据表,插入数据,查询数据)。

其中查询数据有两种操作方法,分别调用不同的函数,上面的方法比较简单,直接调用sqlite3_get_table()函数得到结果,还有一种方法如下面query1 .c所示。

query1.c
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <sqlite3.h>
  4. #include <string.h>
  5. int Display(void *para,int n_column,char **column_value,char **column_name)
  6. {
  7. int i;
  8. printf("记录包含 %d 个字段\n",n_column);
  9. for( i = 0;i < n_column;i++)
  10. {
  11. printf("字段名:%s 字段值:%s\n",column_name[i],column_value[i]);
  12. }
  13. printf("------------------\n ");
  14. return 0;
  15. }
  16. int main ()
  17. {
  18. char value[200];
  19. sqlite3 *db;
  20. char *errmsg = NULL;
  21. int rc;
  22. rc = sqlite3_open("bb.db",&db);
  23. if(rc)
  24. {
  25. fprintf(stderr, "Can't open sqlite: %s\n", sqlite3_errmsg(db));
  26. sqlite3_close(db);
  27. exit(1);
  28. }
  29. else
  30. printf("open sqlite success\n");
  31. rc = sqlite3_exec(db,"create table mytable(id,ip);",NULL,NULL,errmsg);
  32. if(rc == SQLITE_OK)
  33. {
  34. printf("create table success\n");
  35. }
  36. else
  37. {
  38. printf("create table failure\n");
  39. }
  40. sqlite3_exec(db,"insert into mytable(id,ip) values(1,2);",NULL,NULL,errmsg);
  41. sqlite3_exec(db,"select * from mytable",Display,NULL,errmsg);
  42. sqlite3_close(db);
  43. }

运行结果如下,由于之前已经创建过mytable这个表,再次创建会提示创建失败。

查询采用了回显函数Display(void *para,int n_column,char **column_value,char **column_name)和sqlite3_exec(db,"select * from mytable",Display,NULL,errmsg);组合使用

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/173209
推荐阅读
相关标签
  

闽ICP备14008679号