文档章节

Sqlite3_prepare

石头哥哥
 石头哥哥
发布于 2016/02/16 15:10
字数 964
阅读 1K
收藏 0

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

这个函数将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_*()来给这些参数绑定值

© 著作权归作者所有

石头哥哥

石头哥哥

粉丝 303
博文 203
码字总数 120417
作品 2
广州
程序员
私信 提问
加载中

评论(0)

SQLite的sqlite3_prepare_v2

original SQL text---<sqlite3preparev2>--->sqlite3stmt--<sqlite3reset>-->clear sqlite3stmt --<sqlite3bind(stmt,1,)>--> configed sqlite3stmt --<sqlite3step()>--->run sqlite3stmt--......

osc_5y7u8lno
2019/04/10
2
0
SQlite学习(C/C++接口介绍)

转自:https://mp.weixin.qq.com/s/K2k8LpC8l5zcijaiiEPhPg 1.前言 从本文开始介绍怎样去使用SQlite的编程接口。当然在文章中会涉及到一些SQL语句的知识,默认各位都是了解并且熟练的,如不熟...

zzwdkxx
03/31
0
0
SQLite 编译期授权回调Compile-Time Authorization Callbacks

原文:https://www.sqlite.org/c3ref/setauthorizer.html int sqlite3setauthorizer( sqlite3, int(xAuth)(void,int,const char,const char,const char,const char), void pUserData ); 该函......

fengyuzaitu
2019/08/15
0
0
谈一谈sqlite这种小型数据库(1)

SQLite是目前最流行的开源嵌入式数据库 SQLite的主要特征:    1. 管理简单,甚至可以认为无需管理。    2. 操作方便,SQLite生成的数据库文件可以在各个平台无缝移植。    3. 可以非常...

osc_d5exiys5
2018/07/13
2
0
数据库之SQLite的介绍与使用20180705

一、SQLite 简介 1.介绍 SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的, 而且...

osc_o5wlp6ft
2018/07/19
4
0

没有更多内容

加载失败,请刷新页面

加载更多

centos7安装squid代理

局域网只有一台服务器可以上互联网,其他机器需要使用代理上网,windows下可以用ccproxy,linux建议使用squid(dns解析需要配合iptables) 1、安装squid yum install squid.x86_64 2、配置squ...

osc_rn23gf4h
4分钟前
8
0
基于表单的网站身份验证的权威指南[关闭] - The definitive guide to form-based website authentication [closed]

问题: Form-based authentication for websites 基于表单的网站身份验证 We believe that Stack Overflow should not just be a resource for very specific technical questions, but also......

fyin1314
5分钟前
7
0
我的第一个Flask项目

项目背景提要 最近公司经常有测试,产品,开发人员需要我帮忙查看服务器上面发送的短信验证码来完成工作上的一些需求。我们的短信验证码由我们后台程序发出,调用第三方短信平台发送,这中间...

osc_6kvl6c8h
6分钟前
10
0
云原生下的开发测试之困与阿里的解决之道

【以下为分享实录,有删节】 测试环境管理之困与阿里巴巴的解决之道 在云原生时代下,软件的迭代速度越来越快,对测试的要求也越来越高,很多开发者开始使用Kubernetes来管理测试环境。在这个...

阿里云技术博客
6分钟前
5
0
Active Directory颗粒化密码策略配置

1 多元(颗粒化)密码策略介绍 在windows server 2000/2003中,我们无法针对域用户不同而设置不同密码策略, 域用户密码策略和账户设置都 由默认域策略控制,如果要重新建立策略我们必须创建...

osc_61i1fz2h
7分钟前
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部