如果既不想写回调函数,又想避免sqlite3_get_table之后麻烦的一维数组遍历,那么利用sqlite3_prepare_v2执行sql select语句,让后sqlite3_step遍历select执行的返回结果是一个非常方便的solution. 当然,你必须要明白sqlite3_prepare_v2不仅仅能够执行table的query selection,也能方便地进行sql Delete, Insert, Update等其他一些操作。它能帮你把sql语句的执行操作变的更加优雅。
[cpp] view plaincopy
  1. int sqlite3_prepare_v2(
  2. sqlite3 *db,            <span style="color:#009900;">/* Database handle */</span>
  3. const char *zSql,       <span style="color:#009900;">/* SQL statement, UTF-8 encoded */</span>
  4. int nByte,              <span style="color:#009900;">/* Maximum length of zSql in bytes. */</span>
  5. sqlite3_stmt **ppStmt,  <span style="color:#009900;">/* OUT: Statement handle */</span>
  6. const char **pzTail     <span style="color:#009900;">/* OUT: Pointer to unused portion of zSql */</span>
  7. );
[cpp] view plaincopy
  1. int sqlite3_step(sqlite3_stmt*);

下面以一段iOS中的selection查询为例说明二者的用法:

[cpp] view plaincopy
  1. -(void)InitializeFilesTable
  2. {
  3. const char * query = "SELECT * FROM [FileObjects]";
  4. sqlite3_stmt * stmt;
  5. int result = sqlite3_prepare_v2(mDatabase, query, -1, &stmt, NULL);
  6. if(SQLITE_OK != result)
  7. {
  8. sqlite3_finalize(stmt);
  9. <span style="color:#009900;">// The table has not been created. Most likely, this is the first time we create the database.
  10. // Therefore, create all tables in it</span>
  11. char * sql = "Create TABLE [FileObjects] ([FileId] VARCHAR(128),[FileExt] VARCHAR(128), [FileName] VARCHAR(128), [FileUrl] VARCHAR(128), [FileType] INT  );"; <span style="color:#009900;">// NOXLATE</span>
  12. char * errMsg;
  13. result = sqlite3_exec(mDatabase, sql, NULL, NULL, &errMsg);
  14. }
  15. else
  16. {
  17. <span style="color:#009900;">// Select returns OK, initialize the memory model from the result</span>
  18. NSMutableDictionary * files = [NSMutableDictionary new];
  19. while(sqlite3_step(stmt) == SQLITE_ROW)
  20. {
  21. FileObject * file = [FileObject new];
  22. const char * str = (const char *)sqlite3_column_text(stmt, 0);
  23. file.FileId = str? [[NSString alloc] initWithUTF8String:str] : @"";
  24. str = (const char *)sqlite3_column_text(stmt, 1);
  25. file.FileExt = str? [[NSString alloc] initWithUTF8String:str] : @"";
  26. str = (const char *)sqlite3_column_text(stmt, 2);
  27. file.FileName = str? [[NSString alloc] initWithUTF8String:str] : @"";
  28. str = (const char *)sqlite3_column_text(stmt, 3);
  29. file.FileUrl = str? [[NSString alloc] initWithUTF8String:str] : @"";
  30. file.FileType = sqlite3_column_int(stmt, 4);
  31. [files setObject:file forKey:file.FileId];
  32. }
  33. sqlite3_finalize(stmt);
  34. [mFiles setDictionary:files];
  35. }
  36. }

这其中包括对sqlite3_exec的调用。sqlite3_exec可以执行任何sql语句,包括事务("BEGIN TRANSACTION")、回滚("ROLLBACK")和提交("COMMIT")等等。

SQLLite (四):sqlite3_prepare_v2,sqlite3_step相关推荐

  1. 数据库初级入门sqlite3版本

    0.数据库大纲 数据库是什么 ? 如何在在命令行使用SQL语句操作数据库 ? 如何在C/C++程序中操作数据库 1.数据库和数据库管理系统及数据库系统 数据库是一个存储数据(电子化表格)的仓库. 数据 ...

  2. sqlite3接口API函数备注(2)

    目录 一.打开数据库文件 二.预查询过程:准备-执行-完成 三.扩展:使用参数化SQL (sqlite3_prepare_v2 ) sqlite3_prepare_v2 和  参数化SQL 使用示例: ...

  3. Azorult变种病毒样本分析笔记

    环境: Win 7 x32 专业版 工具: Exeinfope.火绒剑.PCHunter32.Wireshark.OD.IDA.ImpREC 样本信息: 文件: Shipping Documents_ ...

  4. IOS数据本地存储的四种方式--

    注:借鉴于:http://blog.csdn.net/jianjianyuer/article/details/8556024 在IOS开发过程中,不管是做什么应用,都会碰到数据保存问题.将数据保存到 ...

  5. iOS 四种保存数据的方式!

    2019独角兽企业重金招聘Python工程师标准>>> 在iOS开发过程中,不管是做什么应用,都会碰到数据保存的问题.将数据保存到本地,能够让程序的运行更加流畅,不会出现让人厌恶的菊 ...

  6. (九)HTML5本地存储——本地数据库SQLLite的使用

    在HTML5中,大大丰富了客户端本地可以存储的内容,添加了很多功能将原本必须要保存在服务器上的数据转为保存在客户端本地,从而大大提高了web应用程序额的性能,减轻了服务器端的负担,使web时代重新回到 ...

  7. SQLLite (一)基本介绍

    随着云和mobile设备的流行,SQLite作为一款开源的轻量级数据库也被越来越广泛地应用.从HTML5到android,ios和win8为代表的mobile平台都对它提供了天然的支持与整合.因此对S ...

  8. HTML5中本地数据库(SQLLite)的基础

    在html5中,可以像访问本地文件那样轻松的对内置数据库进行直接访问. html5中内置了两种数据库,一种为SQLLite,另一种为indexedDB. 在js中使用SQLLite数据库的步骤: 1. ...

  9. SqlLite在Net中的使用

    一.下载SQLite源码 http://www.sqlite.org/download.html 管理工具:http://www.sqliteexpert.com/ 二.下载ADO.NET 2.0 F ...

最新文章

  1. ESP8266 Flash
  2. 她13岁自己造飞机,17岁进麻省理工,3篇黑洞论文被霍金引用......
  3. 嵌入式基于Linux电机控制,嵌入式linux下控制电机运动
  4. 荷兰苹果店发生人质劫持事件:持枪者已被制服
  5. ExtJS视频学习笔记
  6. Android系统Audio框架介绍(一)
  7. Makefile,Shell command,Shell Language 之间的联系
  8. 网易云 NeteaseCloudMusicApi 码云下载
  9. Unity3D人体18节点骨骼动态简单点线模型的建立
  10. c语言程序输出三角,C语言小程序之输出“上三角”
  11. 电脑声音有回音 怎么弄回去啊 5
  12. 程序员的未来之路[转]
  13. txt电子书如何用安卓手机完美打开?
  14. android -- 蓝牙 bluetooth (一) 入门
  15. mysql存储过程 根据查询的结果集向表中插入数据
  16. Android Studio代理设置(SDK下载代理设置)
  17. Laplacian eigenmap 拉普拉斯特征映射
  18. 一个SAP开发人员的2019年终总结
  19. 类名不是抽象的,并且未覆盖XX类中的抽象方法jjjj
  20. java 模拟登录58同城,Java项目实战之同城信息网站(类似58同城)开发

热门文章

  1. ReactJS入门之JSX语法
  2. 封装案例-创建士兵类-完成初始化方法
  3. 深入浅出extjs第2版_LINGO实例教程第2版第2期上线
  4. python3怎么使用qstring_请问PyQt的QString和python的string的区别?
  5. 在 IntelliJ IDEA 中,如何快速将选中文件用资源管理器打开
  6. 201105阶段二qt创建简单工程
  7. OP07高级电路图-摘自:Reza Moghim
  8. WEBGL学习【八】模型视图投影矩阵
  9. 工作流学习——Activiti整体认识二步曲
  10. methanol 模块化的可定制的网页爬虫软件,主要的优点是速度快。