加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

sqlite3 初接触

发布时间:2020-12-12 23:57:47 所属栏目:百科 来源:网络整理
导读:sqlite 学习博客: http://www.cnblogs.com/stephen-liu74/archive/2012/03/09/2328757.html sqilte 封装第三方库 : http://www.sqlite.org/cvstrac/wiki?p=SqliteWrappers SQLite3 SQLite是一个轻量级的数据库。和常用的MySQL大同小异。和MySQL相比,数据

  1. HostSystem:Archlinux
  2. gcc:4.6.120110819
  3. sqlite3:3.7.820110919

系统一般没有默认安装sqlite数据库,所以先要安装sqlite3:

#pacman-Ssqlite3可以使用"sqlite3 + 数据库名"来打开一个数据库。

常用函数

    sqlite3_open(constchar*filename,sqlite3**ppDb);
  1. sqlite3_close(sqlite3*db);
  2. sqlite3_exec(sqlite3*,constchar*sql,int(*callback)(void*,0); background-color:inherit">,0); background-color:inherit">**,0); background-color:inherit">**),0); background-color:inherit">**errmsg);

这三个函数基本上能完成对sqlite3的所有操作。需要用的头文件为"sqlite3.h"。

  • 打开(新建)数据库
    1. sqlite3*db;
    2. sqlite3_open("test.db"
  • 关闭数据库
    sqlite3_close(db);
  • 执行sql语句(以创建表为例)
    charsql[128];
  • memset(sql,''sprintf(sql,"%s%s%s""createtable""test_tb""(idINTEGERPRIMARYKEY,dataTEXT)");
  • sqlite3_exec(db,sql,NULL,NULL);
  • sqlite3_exec中第一个和第二个参数的意义很好理解。第三个参数是一个回调(callback)函数。第四个参数可用于给回调函数传入一个参数。第五个参数为这条sql语句执行后的返回。我试了好几次,第五个参数的返回值打印出来都是乱码,所以建议直接查看sqlite3_exec函数的返回指,它返回一个整型的数,可以通过这个数字来得知的执行结果。

    下面给个例子来看回调函数是怎么执行的:查询数据库中的一张表,并把表中的内容写到文件中。
      #include<stdio.h>
    1. #include<string.h>
    2. #include<sqlite3.h>
    3. /*callback函数中:
    4. *arg:是从主函数传进来的参数
    5. *values:是查询结果的值
    6. *names:查询结果列的名字
    7. */
    8. wf_callback(*arg,0); background-color:inherit">nr,0); background-color:inherit">**values,0); background-color:inherit">**names)
    9. {
    10. i;
    11. FILE*fd;
    12. str[128];
    13. fd=(*)arg;//将void*的参数强制转换为FILE*for(i=0;i<nr;i++){//将查询结果写入到文件中memset(str,128);
    14. sprintf(str,"t%st"fwrite(str,153); background-color:inherit; font-weight:bold">sizeof(),0); background-color:inherit">(str),fd);
    15. }
    16. fwrite("n"//写完一条记录换行return0;//callback函数正常返回0main()
    17. {
    18. sql[128];
    19. sqlite3*db;
    20. //打开(或新建)一个数据库/*新建一张表*/strcpy(sql,"createtabletb(idINTEGERPRIMARYKEY,0); background-color:inherit">);
    21. /*新建一个文件,把数据库的查询结果保存在该文件中*/fd=fopen("test""w"fwrite("Result:n""select*fromtb"fclose(fd);
    22. sqlite3_close(db);//关闭数据库0;
    23. }

    编译、运行结果如下图:



    我们关注这里的回调函数wf_callback()。sqlite3_exec()函数先执行sql语句,如果sql语句的执行结果不为空,则调用回调函数进行处理。test文件中有3行数据,所以wf_callback()函数被调用了三次(这里我们也可以在回调函数中添加一个全局变量来计数,以查看回调函数是否多次被调用)。因为回调函数会被多次调用,所以这里在main函数中打开文件,把文件描述符以参数的形式传递给回调函数;否则,将fopen和fclose写到回调函数中,每调用一次回调函数,回调函数都会以“w”去打开文件,第二次调用回调函数的结果会覆盖第一调用回调函数的结果,使写入文件的内容不正确(只会在文件中写入最后一条记录)。

    如果在查询语句中调用了SQL中的一些函数,如sum()等,也可以同样用回调函数来处理查询结果,如:

      strcpy(sql,"selectsum(id)fromtb");
    1. intresult;
    2. intsum_callback(void*arg,intnr,char**values,char**names)
    3. result=atoi(values[0]);
    4. return0;
    5. }
    然后再对result进行处理。当然,也可以不定义这个全局变量,而直接在回调函数里对result进行处理。需要注意的是,查询结果均为字符数组形式的,所以如果需要的结果是int型或者float型,则需要相应的函数来转换,如atoi(),atof()等。

    原文地址:http://www.linuxidc.com/Linux/2011-10/45920.htm

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!


sqlite 学习博客: http://www.cnblogs.com/stephen-liu74/archive/2012/03/09/2328757.html

sqilte 封装第三方库http://www.sqlite.org/cvstrac/wiki?p=SqliteWrappers

SQLite3

SQLite是一个轻量级的数据库。和常用的MySQL大同小异。和MySQL相比,数据类型基本一样,只是sqlite的指令都是以"."开头(如:mysql中查看当前有哪些数据库是“show databases",而sqlite中是".databases")。当然,SQL语句都是一样的语法规则。

    推荐文章
      热点阅读