- 内容简介
- 译者序
- 前言
- 第 1 章 安装配置新项目
- 第 2 章 Flexbox 布局介绍
- 第 3 章 用 React Native 开发一个应用
- 第 4 章 在 React Native 中使用导航
- 第 5 章 动画和滑动菜单
- 第 6 章 用 React Native 绘制 Canvas
- 第 7 章 使用 React Native 播放音频
- 第 8 章 你的第一个自定义视图
- 第 9 章 Flux 介绍
- 第 10 章 处理复杂的应用程序状态
- 第 11 章 使用 Node 来实现服务端 API
- 第 12 章 在 React Native 中使用文件上传
- 第 13 章 理解 JavaScript Promise
- 第 14 章 fetch 简介
- 第 15 章 在 iOS 中使用 SQLite
- 第 16 章 集成 Google Admob
- 第 17 章 React Native 组件国际化
- 附录 A React.js 快速介绍
- 附录 B Objective-C Primer
- 附录 C webpack 入门
绑定变量
尽管可以通过构造 SQL 字符串来插入值,但是更好的方式是使用绑定变量来达到相同目的。这种方式可以减少一些烦琐的操作,确保字符串不包含非法字符,同时也避免了引号的错误使用。使用绑定变量可以让我们无需关注这些问题,因为程序已经帮我们做了。那么如何使用呢?首先我们需要写一条完整的 SQL 语句,然后在需要使用变量的地方用问号(? )来替代。在 SQL 语句执行前,每一个有问号的地方都会进行变量绑定。下一步,把变量的值替换到 SQL 语句中,一切就绪后执行。在下面的例子中,我们在一条 SQL 语句中对两个地方进行了变量绑定,第一个参数绑定了一个 int 值,第二个参数绑定了一个 string 值,然后执行后释放资源:
char *sql = "insert into foo values (? , ? ); "; sqlite3_stmt *stmt; if (sqlite3_prepare_v2(database, sql, -1, &stmt, nil) == SQLITE_OK) { sqlite3_bind_int(stmt, 1, 235); sqlite3_bind_text(stmt, 2, "Bar", -1, NULL); } if (sqlite3_step(stmt) ! = SQLITE_DONE) NSLog(@"This should be real error checking! ");
sqlite3_finalize(stmt);
这里可以用很多种绑定方式,具体取决于你需要使用的数据类型。大多数的绑定函数只有三个参数:
1.对任何数据绑定的函数来说,第一个参数都是一样的,它表示一个指针。例如,上面例子中 sqlite3_prepare_v2() 调用时使用的 sqlite3_stmt。
2.第二个参数是变量绑定秩序的索引值。需要注意的是,这里索引值的规定是,SQL 语句中第一个问号出现的位置(起始位置)索引值为 1,后面出现问号的位置比它左边位置的索引值每次大 1。
3.第三个参数为需要替换问号的变量值。
但是在另外一些变量绑定的函数中,如绑定文本或二进制数的函数,还有两个额外的参数:
1.第一个额外的参数表示上文中第三个参数值的长度。在使用 C 语言字符串的情况下,可以传递-1 来代替字符串的长度值,这时函数会使用完整的字符串进行操作。在其他情况下,要输入该函数需要处理的数据长度。
2.最后一个参数是可选项,表示语句运行完后需要执行的回调函数。例如,当你最后还想做内存清理的额外工作时,就需要用到它。通常情况下,这种需求会使用 malloc() 方法来释放内存。
绑定语句后面的语法可能看起来有点奇怪,这是因为我们做的只是插入操作而已。当我们使用变量绑定时,相同的代码也可以用来做查询和更新操作。如果 SQL 语句执行的是查询操作,而非更新操作,那么我们必须要多次调用 sqlite3_step(),直到它返回与 SQLITE_DONE 相同的值才结束。上面的代码中我们执行的是更新操作,所以只调用一次就可以了。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论