SQlite3高级应用篇(C/C++编程接口)

前端之家收集整理的这篇文章主要介绍了SQlite3高级应用篇(C/C++编程接口)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  1. /*
  2. /////////////////////////////////简介/////////////////////////////////
  3. sqlite是一种嵌入式数据库,它跟微软的Access差不多,只是一个.db格式的文件。但是与Access不同的是,它不需要安装任何软件,非常轻巧。很多软件都有用到这个家伙,包括腾讯QQ、迅雷(你在迅雷的安装目录里可以看到有一个sqlite3.dll的文件,就是它了),以及现在大名鼎鼎的android等。sqlite3是它的第三个主要版本。就是sqlite3.0的意思。 对了,金山词霸也有用到sqlite,其实太多软件用那玩意儿了。
  4.  
  5. sqlite是一个开源的嵌入式关系数据库,在2000年由D.Richard Hipp发布。sqlite能够减少应用程序管理数据库的开销,可逢移植性好,高效而且可靠。sqlite嵌入到应用程序中,与应用程序共用相同的进程空间,而不是单独的一个进程。从外部看,sqlite并不像一个关系数据库,但在进程内部,却是完整的、自包含的数据库引擎。
  6. */
  1. /*
  2. 核心对象:
  3. 数据库连接对象: sqlite3
  4. prepared_statement对象: sqlite3_stmt
  5.  
  6. 严格的讲sqlite3_stmt对象也不是必须的,另外两个封装了sqlite3_stmt的接口sqlite3_exec和sqlite3_get_table可以代替sqlite3_stmt对象完成数据存取工作,但是理解sqlite3_stmt对于充分使用sqlite有很大帮助以下是一些操作sqlite3和sqlite3_stmt对象的接口,下面这些名字只是提供一个概念,实际的函数可能会有很多版本比如sqlite3_open()有,sqlite3_open_v16(),sqlite3_open_v2()
  7. */
  1. /*
  2. 关键函数:
  3. */
  4. sqlite3_open() //打开数据库
  5. sqlite3_prepare() //将sql语句转换成sqlite3_stmt对象,增加sqlite3_prepare_v2()
  6. sqlite3_step() //单步执行sqlite3_stmt
  7. sqlite3_column() //返回sqlite3_stmt所在行的指定column的值
  8. sqlite3_finalize() //销毁sqlite3_stmt对象,释放内存
  9. sqlite3_close() //关闭数据库
  10. /*
  11. 只要会用以上六个函数的使用也就差不多已经进入了sqlite3的C/C++编程了
  12. */
  1. #include <iostream>
  2. #include <string.h>
  3. #include "sqlite3.h"
  4. #pragma comment(lib,".\\sqlite3.lib")
  5.  
  6. using namespace std;
  7.  
  8. /*
  9. 编译环境:VC6.0
  10. */
  11.  
  12. //创建"表"函数
  13. void Create(int &rc,sqlite3 *db,char *sql,sqlite3_stmt *stmt)
  14. {
  15. //判断是否已经存在表了
  16. rc=sqlite3_prepare_v2(db,sql,strlen(sql),&stmt,0);
  17. if (rc)
  18. {
  19. fprintf(stderr,"对象转换失败:%s\n",sqlite3_errmsg(db));
  20. return;
  21. }
  22. //执行stmt(执行sql语句)
  23. sqlite3_step(stmt);
  24. //释放stmt资源
  25. sqlite3_finalize(stmt);
  26. }
  27.  
  28. void Insert(int &rc,sqlite3_stmt *stmt,char name[])
  29. {
  30. sprintf(sql,"INSERT INTO MyTable VALUES(NULL,'%s');",name);
  31. rc=sqlite3_prepare_v2(db,sqlite3_errmsg(db));
  32. return;
  33. }
  34. sqlite3_step(stmt);
  35. sqlite3_finalize(stmt);
  36. }
  37.  
  38. int main()
  39. {
  40. //sqlite3两个重要对象
  41. sqlite3 *db;
  42. sqlite3_stmt *stmt=0;
  43. //创建表的结构
  44. char sql[]= "CREATE TABLE IF NOT EXISTS MyTable(ID integer NOT NULL primary "
  45. "key autoincrement,Name nvarchar(32));";
  46. //[1]打开数据库
  47. int rc=sqlite3_open("MyDB.db",&db);
  48. if (rc)
  49. {
  50. sqlite3_close(db);
  51. return -1;
  52. }
  53. else
  54. Create(rc,db,stmt);
  55. //向数据里边插入些数据,用来测试
  56. Insert(rc,stmt,"张三");
  57. Insert(rc,"李四");
  58. Insert(rc,"王五");
  59. Insert(rc,"赵六");
  60. sprintf(sql,"SELECT * FROM MyTable;");
  61. //[2]将sql语句转换成stmt对象
  62. sqlite3_prepare_v2(db,0);
  63. int id;
  64. unsigned char *name;
  65. //[3]循环执行stmt对象,读取数据库里边的数据
  66. while(sqlite3_step(stmt)==sqlITE_ROW)
  67. {
  68. //[4]绑定变量
  69. id=sqlite3_column_int(stmt,0);
  70. name=(unsigned char *)sqlite3_column_text(stmt,1);
  71. cout<<id<<'\t'<<name<<endl;
  72. }
  73. //[5]释放资源
  74. sqlite3_finalize(stmt);
  75. //[6]关闭数据库
  76. sqlite3_close(db);
  77. return 0;
  78. }

本文源代码下载

猜你在找的Sqlite相关文章