Sqlite3_prepare
这个函数将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相关推荐
- iOS开发-xcdatamodeld文件 CoreData的介绍和使用,sqlite的使用
CoreData的介绍和使用 源引:http://www.jianshu.com/p/d027090af00e CoreData是数据存储的一种方式,CoreData实质也是对SQLite的封装. ...
- Linux查看WAS的jvm信息,linux 下使用命令查看jvm信息
java程序员除了编写业务代码之外,特别是项目上线之后,更需要关注的是系统的性能表现,这个时候就需要了解一下jvm的性能表现了,可以借助于java虚拟机自带的一些分析工具,主要有三个常用的命令. 1. ...
- sqlite3 解决并发读写冲突的问题
1 #include "stdafx.h" 2 #include "sqlite3.h" 3 #include <iostream> 4 #incl ...
- runtime 任意类型 model 数据库方便存储
//这里边直接上代码 之后我在慢慢地讲解 之后我的QQ:378254160 我有DEMO 方便你们的使用联系我备注 runtime+数据库+任意model类型 当然有时候也是有局限的 //Data ...
- SQLite入门与分析(二)---设计与概念
写在前面:谢谢各位的关注,没想到会有这么多人关注.高兴的同时,也感到压力,因为我接触SQLite也就几天,也没在实际开发中用过,只是最近项目的需求才来研究它,所以我很担心自己的文章是否会有错误,误导别 ...
- sqlite3.h--dbhelp.h数据库底层文件
添加libsqlite3.0.dylib库 #import "sqlite3.h" 1.打开数据库 NSArray *paths = NSSearchPathForDirector ...
- sqlite3 内存持续增加_sqlite3使用简介(内含解决sqlite内存的方法)
一.使用流程 要使用sqlite,需要从sqlite官网下载到三个文件,分别为sqlite3.lib,sqlite3.dll,sqlite3.h,然后再在自己的工程中配置好头文件和库文件,同时将dll ...
- SQLite3-各个函数
首先,添加framework:libsqlite3.0.dylib需要在对应文件的头文件中加入:#import "/usr/include/sqlite3.h" 并在Framewo ...
- Sqlite c/c++ api 学习
Sqlite是我最喜欢使用的文件数据库,它小巧.方便.速度快.支持大部分标准sql语句.开源.免费 .. .. .. 优点太多了.自从认识了她之后,我就将Access打入了冷宫,发誓以后再也不用Acc ...
最新文章
- python 安装使用saltstack salt-api 简介
- 腾讯后台开发面试题--整理1
- centos 安装部署 zabbix3
- python中面向对象的缺点_最简单的方法搞懂Python面向对象
- 生产者消费者的实际使用
- java5.0下载_java虚拟机
- LINUX smb共享
- aspx页面,中文乱码解决方案
- html5 超链接 图像映射,链接图像
- Ubuntu搜索不到WiFi的解决办法
- hdmi 屏幕旋转 树莓派_使用树莓派的轻量级远征工具套装
- Linux入门之安装Centos并实现Xshell远程SSH连接
- 生成均匀分布次序统计量的伪随机数 生成删失伪随机样本
- WebStrom终端使用git 出现 'git'不是内部或外部命令,也不是可运行的程序 或批处理文件
- Db2 SQL PL中的控制语句
- Internet Download Manager 6.37.15简体中文版
- SQL-包含中文字、英文、数字字符
- 史上最牛最强的linux学习笔记 10.shell基础
- linux用cat命令创建一个文件,用cat在命令行创建文件
- pytorch实现lstm分类模型
热门文章
- oracle 监听 无法连接,oracle监听hang,无法建立新连接TNS-12540
- centos7 postgresql9和postgis2.1插件编译部署
- sqlserver备份还原后数据库关系图无法显示问题
- java 分析excel模板_java如何读取Excel简单模板
- django本地安装mysql_django使用mysql(本地环境下)_MySQL
- centos7,google身份验证
- kafka operation
- bzoj1094[ZJOI2007]粒子运动 计算几何
- linux下搭建mongodb副本集
- insert---插入记录