这个函数将sql文本转换成一个准备语句(prepared statement)对象,同时返回这个对象的指针。这个接口需要一个数据库连接指针以及一个要准备的包含SQL语句的文本。它实际上并不执行(evaluate)这个SQL语句,它仅仅为执行准备这个sql语句

函数定义(仅列出UTF-8的)

int sqlite3_prepare(

sqlite3 *db,            /* Database handle */

const char *zSql,       /* SQL statement, UTF-8 encoded */

int nByte,              /* Maximum length of zSql in bytes. */

sqlite3_stmt **ppStmt,  /* OUT: Statement handle */

const char **pzTail     /* OUT: Pointer to unused portion of zSql */

);

int sqlite3_prepare_v2(

sqlite3 *db,            /* Database handle */

const char *zSql,       /* SQL statement, UTF-8 encoded */

int nByte,              /* Maximum length of zSql in bytes. */

sqlite3_stmt **ppStmt,  /* OUT: Statement handle */

const char **pzTail     /* OUT: Pointer to unused portion of zSql */

);

参数:

db:数据指针

zSql:sql语句,使用UTF-8编码

nByte:如果nByte小于0,则函数取出zSql中从开始到第一个0终止符的内容;如果nByte不是负的,那么它就是这个函数能从zSql中读取的字节数的最大值。如果nBytes非负,zSql在第一次遇见’/000/或’u000’的时候终止

pzTail:上面提到zSql在遇见终止符或者是达到设定的nByte之后结束,假如zSql还有剩余的内容,那么这些剩余的内容被存放到pZTail中,不包括终止符

ppStmt:能够使用sqlite3_step()执行的编译好的准备语句的指针,如果错误发生,它被置为NULL,如假如输入的文本不包括sql语句。调用过程必须负责在编译好的sql语句完成使用后使用sqlite3_finalize()删除它。

说明

如果执行成功,则返回SQLITE_OK,否则返回一个错误码。推荐在现在任何的程序中都使用sqlite3_prepare_v2这个函数,sqlite3_prepare只是用于前向兼容

备注

<1>准备语句(prepared statement)对象

typedef struct sqlite3_stmt sqlite3_stmt;

准备语句(prepared statement)对象一个代表一个简单SQL语句对象的实例,这个对象通常被称为“准备语句”或者“编译好的SQL语句”或者就直接称为“语句”。

语句对象的生命周期经历这样的过程:

l  使用sqlite3_prepare_v2或相关的函数创建这个对象

l  使用sqlite3_bind_*()给宿主参数(host parameters)绑定值

l  通过调用sqlite3_step一次或多次来执行这个sql

l  使用sqlite3——reset()重置这个语句,然后回到第2步,这个过程做0次或多次

l  使用sqlite3_finalize()销毁这个对象

在sqlite中并没有定义sqlite3_stmt这个结构的具体内容,它只是一个抽象类型,在使用过程中一般以它的指针进行操作,而sqlite3_stmt类型的指针在实际上是一个指向Vdbe的结构体得指针

<2>宿主参数(host parameters)

在传给sqlite3_prepare_v2()的sql的语句文本或者它的变量中,满足如下模板的文字将被替换成一个参数:

l  ?

l  ?NNN,NNN代表数字

l  :VVV,VVV代表字符

l  @VVV

l  $VVV

在上面这些模板中,NNN代表一个数字,VVV代表一个字母数字标记符(例如:222表示名称为222的标记符),sql语句中的参数(变量)通过上面的几个模板来指定,如

“select ? from ? “这个语句中指定了两个参数,sqlite语句中的第一个参数的索引值是1,这就知道这个语句中的两个参数的索引分别为1和2,使用”?”的话会被自动给予索引值,而使用”?NNN”则可以自己指定参数的索引值,它表示这个参数的索引值为NNN。”:VVV”表示一个名为”VVV”的参数,它也有一个索引值,被自动指定。

可以使用sqlite3_bind_*()来给这些参数绑定值

Sqlite3_prepare相关推荐

  1. iOS开发-xcdatamodeld文件 CoreData的介绍和使用,sqlite的使用

    CoreData的介绍和使用  源引:http://www.jianshu.com/p/d027090af00e CoreData是数据存储的一种方式,CoreData实质也是对SQLite的封装. ...

  2. Linux查看WAS的jvm信息,linux 下使用命令查看jvm信息

    java程序员除了编写业务代码之外,特别是项目上线之后,更需要关注的是系统的性能表现,这个时候就需要了解一下jvm的性能表现了,可以借助于java虚拟机自带的一些分析工具,主要有三个常用的命令. 1. ...

  3. sqlite3 解决并发读写冲突的问题

    1 #include "stdafx.h" 2 #include "sqlite3.h" 3 #include <iostream> 4 #incl ...

  4. runtime 任意类型 model 数据库方便存储

    //这里边直接上代码 之后我在慢慢地讲解  之后我的QQ:378254160 我有DEMO 方便你们的使用联系我备注 runtime+数据库+任意model类型  当然有时候也是有局限的 //Data ...

  5. SQLite入门与分析(二)---设计与概念

    写在前面:谢谢各位的关注,没想到会有这么多人关注.高兴的同时,也感到压力,因为我接触SQLite也就几天,也没在实际开发中用过,只是最近项目的需求才来研究它,所以我很担心自己的文章是否会有错误,误导别 ...

  6. sqlite3.h--dbhelp.h数据库底层文件

    添加libsqlite3.0.dylib库 #import "sqlite3.h" 1.打开数据库 NSArray *paths = NSSearchPathForDirector ...

  7. sqlite3 内存持续增加_sqlite3使用简介(内含解决sqlite内存的方法)

    一.使用流程 要使用sqlite,需要从sqlite官网下载到三个文件,分别为sqlite3.lib,sqlite3.dll,sqlite3.h,然后再在自己的工程中配置好头文件和库文件,同时将dll ...

  8. SQLite3-各个函数

    首先,添加framework:libsqlite3.0.dylib需要在对应文件的头文件中加入:#import "/usr/include/sqlite3.h" 并在Framewo ...

  9. Sqlite c/c++ api 学习

    Sqlite是我最喜欢使用的文件数据库,它小巧.方便.速度快.支持大部分标准sql语句.开源.免费 .. .. .. 优点太多了.自从认识了她之后,我就将Access打入了冷宫,发誓以后再也不用Acc ...

最新文章

  1. python 安装使用saltstack salt-api 简介
  2. 腾讯后台开发面试题--整理1
  3. centos 安装部署 zabbix3
  4. python中面向对象的缺点_最简单的方法搞懂Python面向对象
  5. 生产者消费者的实际使用
  6. java5.0下载_java虚拟机
  7. LINUX smb共享
  8. aspx页面,中文乱码解决方案
  9. html5 超链接 图像映射,链接图像
  10. Ubuntu搜索不到WiFi的解决办法
  11. hdmi 屏幕旋转 树莓派_使用树莓派的轻量级远征工具套装
  12. Linux入门之安装Centos并实现Xshell远程SSH连接
  13. 生成均匀分布次序统计量的伪随机数 生成删失伪随机样本
  14. WebStrom终端使用git 出现 'git'不是内部或外部命令,也不是可运行的程序 或批处理文件
  15. Db2 SQL PL中的控制语句
  16. Internet Download Manager 6.37.15简体中文版
  17. SQL-包含中文字、英文、数字字符
  18. 史上最牛最强的linux学习笔记 10.shell基础
  19. linux用cat命令创建一个文件,用cat在命令行创建文件
  20. pytorch实现lstm分类模型

热门文章

  1. oracle 监听 无法连接,oracle监听hang,无法建立新连接TNS-12540
  2. centos7 postgresql9和postgis2.1插件编译部署
  3. sqlserver备份还原后数据库关系图无法显示问题
  4. java 分析excel模板_java如何读取Excel简单模板
  5. django本地安装mysql_django使用mysql(本地环境下)_MySQL
  6. centos7,google身份验证
  7. kafka operation
  8. bzoj1094[ZJOI2007]粒子运动 计算几何
  9. linux下搭建mongodb副本集
  10. insert---插入记录