当前位置:   article > 正文

Sqlite 数据库操作(二)—— Sqlite常用API 及其使用方法_sqlite3_open

sqlite3_open

要使用sqlite数据库的API,需要满足两个条件:

  • 安装sqlite3函数库                          —— 终端输入 sudo apt-get install libsqlite3-dev 
  • 在程序中引入头文件 sqlite3.h        —— #include <sqlite3.h>
  • gcc编译时链接 sqlite3动态库         —— gcc -o sqlite3_t sqlite3_t.c -lsqlite3      


         目录

1、打开数据库文件 sqlite3_open

2、关闭数据库文件 sqlite3_close

3、执行sql语句 sqlite3_exec

(1) sqlite3_exec

(2) 回调函数 callback 参数解析

4、查询表格数据 sqlite3_get_table

5、总结:使用上述API实现表格的创建及增删查改


1、打开数据库文件 sqlite3_open

第一个参数 filename:数据库名称(输入型参数)。sqlite3命令创建数据库的时候,会生成一个数据库文件 xxx.db ,这里要填的就是该数据库文件的路径。

第二个参数ppDb:数据库操作句柄(输出型参数)。后续的增删查改操作都需要通过该句柄实现

返回值:成功返回 SQLITE_OK,失败返回错误码,可以使用sqlite3_errmsg函数获取错误信息。

  1. #include <sqlite3.h>
  2. #define DATABASE "/home/linux/myproject.db"
  3. sqlite3* db;
  4. if(sqlite3_open(DATABASE, &db) != SQLITE_OK){
  5. printf("%s\n", sqlite3_errmsg(&db));
  6. exit(1);
  7. }

2、关闭数据库文件 sqlite3_close

参数是数据库操作句柄,如果关闭成功返回SQLITE_OK,如果数据库还处在使用状态,那就会关闭失败,此时返回 SQLITE_BUSY。

3、执行sql语句 sqlite3_exec

(1) sqlite3_exec

第一个参数 sqlite3:数据库操作句柄

第二个参数 sql:要执行的sql语句

第三个参数 callback:回调函数。只有在执行查询语句的时候,才会需要传参,其他执行语句,直接填NULL。只有在查询的时候,会返回查询结果,回调函数的参数大部分是输出型参数,用于返回查询结果。

第四个参数 args:给回调函数传递的参数。

第五个参数 errmsg:执行sql语句时产生的错误信息。

返回值:成功返回SQLITE_OK;失败返回错误码

  1. int callback(void* arg, int ncolumns , char** f_value, char** f_name)
  2. {}
  3. char** errmsg;
  4. if(sqlite3_exec(&db, "select * from project", callback, NULL, &errmsg) != SQLITE_OK)
  5. {
  6. printf("%s\n", errmsg);
  7. }

(2) 回调函数 callback 参数解析

在查询的过程中,每查询到一条记录就会通过回调函数返回,而不是查询到所有数据再一起返回

int callback(void* arg, int ncolumns , char** f_value, char** f_name);

第一个参数 arg:sqlite_exec传递过来的参数

第二个参数 ncolumns:列数

第三个参数 f_value:某一个字段的所有内容

第四个参数 f_name:字段名称

4、查询表格数据 sqlite3_get_table

除了使用 sqlite3_exec 来查询表格内容外,还可以使用 sqlite3_get_table 来直接获取到表格内容,该函数无需传入回调函数。

第一个参数 db:数据库操作句柄

第二个参数 zSql:要执行的sql语句

第三个参数 pazResult:查询到的表格数据。该指针指向的空间是动态开辟的,使用完以后,我们需要使用 sqlite3_free_table 来释放这块空间。

第四个参数 pnRow:查询结果的行数。即有多少条记录

第五个参数 pnColumn:查询结果的列数。即每一条记录有多少个字段

第六个参数 pzErrmsg:执行语句时产生的错误信息

返回值:成功返回SQLITE_OK;失败返回错误码

如果表格内容如下:

那么结果返回的内容如下:

5、总结:使用上述API实现表格的创建及增删查改

  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <sqlite3.h>
  4. #define DATABASE "/home/linux/myproject.db"
  5. int main(){
  6. sqlite3* db;
  7. // 1.打开数据库文件
  8. if(sqlite3_open(DATABASE, &db) != SQLITE_OK){
  9. printf("%s\n",(char*)sqlite3_errmsg(db));
  10. return 1;
  11. }
  12. // 2.新建一个表格
  13. char** errmsg;
  14. const char* sql = "drop table if exists project;\
  15. create table project(id integer, device char, code integer);";
  16. if(sqlite3_exec(db, sql, NULL, NULL, errmsg) != SQLITE_OK)
  17. {
  18. printf("%s\n", *errmsg);
  19. return 1;
  20. }
  21. // 3.插入一条记录
  22. sql = "insert into project values(1, '冰箱', 1001);";
  23. if(sqlite3_exec(db, sql, NULL, NULL, errmsg) != SQLITE_OK)
  24. {
  25. printf("%s\n", *errmsg);
  26. }
  27. // 4.修改记录
  28. sql = "update project set device='电饭煲' where id=1;";
  29. if(sqlite3_exec(db, sql, NULL, NULL, errmsg) != SQLITE_OK)
  30. {
  31. printf("%s\n", *errmsg);
  32. }
  33. // 5.查询记录
  34. sql = "select * from project;";
  35. char** sqlRes;
  36. int nRows;
  37. int nColumns;
  38. int i, j;
  39. if(sqlite3_get_table(db, sql, &sqlRes, &nRows, &nColumns, errmsg)==SQLITE_OK)
  40. {
  41. for(i = 0; i <= nRows; i++)
  42. {
  43. for(j = 0; j < nColumns; j++)
  44. {
  45. printf("%-11s", sqlRes[i*nColumns + j]);
  46. }
  47. printf("\n");
  48. }
  49. }
  50. // 6.删除一条记录
  51. sql = "delete from project where id=1;";
  52. if(sqlite3_exec(db, sql, NULL, NULL, errmsg) != SQLITE_OK)
  53. {
  54. printf("%s\n", *errmsg);
  55. }
  56. // 关闭数据库文件
  57. sqlite3_close(db);
  58. return 0;
  59. }

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

闽ICP备14008679号