当前位置:   article > 正文

linux下C语言编程操作数据库 sqlite3_linux c语言访问sqlite

linux c语言访问sqlite

1、安装数据库

我们从SQLi官网下载页面 https://www.sqlite.org/download.html 从源代码区下载 sqlite-autoconf-*.tar.gz。
然后在 Linux 下安装sqlite3

第一步:安装

第二步: 解压

第三步: 进入蓝色文件夹

第四步: ./configure(配置安装)

第五步: make (编译)

第六步: sudo make install (开始安装)

第七步: 安装成功

2、sqlite的相关函数

  • sqlite3_open()

函数原型:

  1. #include <sqlite3.h>
  2. int sqlite3_open(const char *dbname,sqlite3 **db)
  3. 函数说明:用来打开一个数据库
  4. 参数说明: 第一个参数dbname是数据库的名称;
  5. 第二个参数db是用于保存打开的数据库文件dbname的信息。
  • sqlite_close()

函数原型:

  1. #include <sqlite3.h>
  2. int sqlite3_close(sqlite3 *db)
  3. 函数说明:用来关闭一个数据库。
  4. 参数说明:db需要关闭的数据库文件。
  • sqlite3_exec()

函数原型:

  1. #include <sqlite3.h>
  2. int sqlite_exec(sqlite *db, const char *sql, int (*callback)(void *int,char **,char **),void *,char **errmsg);
  3. 函数说明: 用来执行sqlite3语句
  4. 参数说明: 第一个参数:db是用于保存打开的数据库文件dbname的信息;
  5. 第二个参数: sql你要执行命令的语句;
  6. 第三个参数: callback回调函数,当这条语句执行之后,sqlite3会去调用你提供的这个函数。通常设为NULL
  7. 第四个参数: void *是你所提供的指针,你可以传递任何一个指针参数到这里,这个参数最终会传到回调函数里面,如果不需要传递指针给回调函数,可以填NULL
  8. 第五个参数: 是错误信息。
说明:通常 sqlite3_callback和它后面的void*这两个位置都可以填NULL 。填NULL表示你不需要回调。比如你做insert 操作,做delete操作,就没有必要使用回调。而当你做select 时,就要使用回调,因为sqlite3 把数据查出来,得通过回调告诉你查出了什么数据。虽然回调显得代码整齐,但有时候你还是想要非回调的select查询。这可以通过sqlite3_get_table 函数做到。
  • sqlite3_get_table()

函数原型:

  1. #include <sqlite3.h>
  2. int sqlite3_get_table(sqlite3 *db, const char *zsql,char ***pazResult, int *nrow, int *ncolumn,char **zErrmsg);
  3. 函数说明: 执行sql的查询功能
  4. 参数说明: 第一个参数db:db是用于保存打开的数据库文件dbname的信息;
  5. 第二个参数: sqlite3的语句,跟sqlite3_exec里的sql是一样的,是一个很普通的以\0结尾的char *字符串。
  6. 第三个参数: 查询的结果,它依然是一维数组,他的内存布局时:字段名称,后面时紧接着是每个字段值。
  7. 第四个参数: 是查询出多少条记录(即查出是多少行,不包括字段名那行)
  8. 第五个参数: 是多少个字段(多少列)
  9. 第六个参数: 是错误信息
注意:如果提供了errmsg,用来创建错误消息的内存是在堆上分布的,故在调用后,应该检查一下是否为null值, 如果有错误发生,使用sqlite3_free()释放errmsg占用的内存

3、代码示例

  • 创建一个数据库

示例代码:

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <sqlite3.h>
  4. #include <stdlib.h>
  5. int main (int argc, char **argv)
  6. {
  7. sqlite3 *db = NULL;
  8. int data = -1;
  9. //打开指定的数据库文件,如果不存在将创建一个同名的数据库文件
  10. data = sqlite3_open("test.db",&db);
  11. if(data < 0)
  12. {
  13. printf("create testsqlite failure:%s\n",sqlite3_errmsg(db)); //创建失败
  14. return -1;
  15. }
  16. else
  17. {
  18. printf("create testsqlite successfuly\n"); //创建成功
  19. sqlite3_close(db);//关闭数据库
  20. return 0;
  21. }
  22. }

执行结果:

  • 需要注意的时在编译时需要在末尾加上一个 -lsqlite3,不然会抛错。

  • ls 查看目录多了刚命名的数据库 test.db

  • 插入数据

示例代码:

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <sqlite3.h>
  4. #include <stdlib.h>
  5. int main (int argc, char **argv)
  6. {
  7. sqlite3 *db = NULL;
  8. int data = -1;
  9. char *msg=0;
  10. char *sql;
  11. //打开指定的数据库文件,如果不存在将创建一个同名的数据库文件
  12. data = sqlite3_open("test.db",&db);
  13. if(data < 0)
  14. {
  15. printf("create testsqlite failure:%s\n",sqlite3_errmsg(db));
  16. return -1;
  17. }
  18. else
  19. {
  20. printf("create testsqlite successfuly\n");
  21. }
  22. sql = "CREATE TABLE stu(ID number, name, age );";
  23. sqlite3_exec(db, sql, 0, 0,&msg);
  24. //以下为添加数据
  25. sql = "INSERT INTO stu VALUES('1','huang','100');";
  26. sqlite3_exec(db, sql, 0, 0,&msg);
  27. sql = "INSERT INTO stu VALUES('2','chen','90');";
  28. sqlite3_exec(db, sql, 0, 0,&msg);
  29. printf("Insert successfuly\n");
  30. sqlite3_close(db);//关闭数据库
  31. return 0;
  32. }

执行结果:

  • 创建了一个 stu 的一个表

  • sqlite3 test.db 进入我们创建的数据库中 ,在sqlite->中输入select *from stu之后就会出现我们刚才往表里插入的内容

  • 查看表的内容

示例代码:

  1. #include <errno.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <sqlite3.h>
  5. #include <stdlib.h>
  6. int main (int argc, char **argv)
  7. {
  8. sqlite3 *db = NULL;
  9. int data;
  10. char *msg=0;
  11. int row=0,column=0; //行 列
  12. char **Result=NULL; //结果
  13. char *sql;
  14. //打开指定的数据库文件,如果不存在将创建一个同名的数据库文件
  15. data = sqlite3_open("test.db",&db);
  16. if(data)
  17. {
  18. printf("create testsqlite failure:%s\n",sqlite3_errmsg(db));
  19. exit(1);
  20. }
  21. printf("create testsqlite successfuly\n");
  22. sql ="SELECT *FROM stu";
  23. data =sqlite3_get_table(db, sql, &Result, &row, &column,&msg);
  24. if(data ==0 )
  25. {
  26. printf("row:%d column=%d \n", row , column);
  27. printf("the result of querying is:\n");
  28. int i=0,j=0;
  29. for (i=0; i< (row+1) *column; i++)
  30. {
  31. printf("%s", Result[i]);
  32. printf("\n");
  33. }
  34. }
  35. else if(data)
  36. {
  37. printf("SQL error!:%s\n",msg);//打印错误信息
  38. sqlite3_free(msg);//释放掉azResult的内存空间
  39. }
  40. sqlite3_close(db);//关闭数据库
  41. return 0;
  42. }

执行结果:

  • 删除数据

示例代码:

  1. #include <errno.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <sqlite3.h>
  5. #include <stdlib.h>
  6. int main (int argc, char **argv)
  7. {
  8. sqlite3 *db=NULL;
  9. int data;
  10. char *msg=0;
  11. char *sql;
  12. char *data1;
  13. //打开指定的数据库文件,如果不存在将创建一个同名的数据库文件
  14. data = sqlite3_open("test.db",&db);
  15. if(data)
  16. {
  17. printf("create tetssqlite failure:%s\n",sqlite3_errmsg(db));
  18. exit(1);
  19. }
  20. printf("create testsqlite successfuly\n");
  21. sql ="DELETE FROM stu";
  22. data=sqlite3_exec(db,sql,NULL,(void *)data1,&msg);
  23. if(data)
  24. {
  25. printf("SQL error!:%s\n",msg);//打印错误信息
  26. sqlite3_free(msg);//释放掉zerrmsg的内存空间
  27. }
  28. else
  29. {
  30. printf("delete recodes successfuly\n");
  31. }
  32. sqlite3_close(db);//关闭数据库
  33. return 0;
  34. }

执行结果:

  • 打开sqlite3创建的表 test.db表中 (数据不见了)

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号