sqlite3使用简介

 

 

int sqlite3_exec(

const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);

l  ?

 

  sqlite3 *db,            /* Database handle */

一.施用流程

  输出的结果:

  • 先sqlite3_column_text() ,然后 sqlite3_column_bytes()
  • 先sqlite3_column_blob(),然后sqlite3_column_bytes()
  • 先sqlite3_column_text16(),然后sqlite3_column_bytes16()

);

5.  sqlite3_finalize

返回值

每当下面这多少个模板被,NNN代表一个数字,VVV代表一个假名数字标记符(例如:222表示称也222的标记符),sql语句被的参数(变量)通过者的多少个模板来指定,如

  const char *sql,                           /* SQL to be evaluated
*/

sqlite3_reset用于重置一个备选语句对象及它们的启状态,然后准备给再一次履行。所有sql语句变量使用sqlite3_bind*绑定值,使用sqlite3_clear_bindings重设这么些绑定。Sqlite3_reset接口重置准备报句到其代码开头的时候。sqlite3_reset并无移在备告句上之此外绑定值,那么那里估计,可能是语句子以被实践之经过被暴发了其他的变动,然后是讲话以它重置到绑定值的时候的可怜状态。

6.  sqlite3_close

  const void *filename,   /* Database filename (UTF-16) */

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

const void *sqlite3_errmsg16(sqlite3*);

int sqlite3_open16(

pzTail:下面提到zSql在遇到终止符或者是上设定的nByte之后停止,假设zSql还出多余的内容,那么那么些剩余的情节为存放在到pZTail中,不包括截至符

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

好以sqlite3_bind_*()来叫这多少个参数绑定值

转头调函数:

 

当空指针上调用这么些函数没有呀影响,同时可准备语句的生命周期的任一时刻调用之函数:在谈为实践前,三次等仍然频繁调用sqlite_reset之后,或者在sqlite3_step任何调用之后任语句是否做到实施

l  使用sqlite3_prepare_v2或有关的函数创立是目的

针对有V3.6.23.1以及其前的有着版本,需要在sqlite3_step()之后调用sqlite3_reset(),在连续之sqlite3_
step以前。假若调用sqlite3_reset重置准备语句败北,将会晤招sqlite3_
step返回SQLITE_MISUSE,但是在V3.
6.23.1以后,sqlite3_step()将会晤自行调用sqlite3_reset。

 

  const char *filename,   /* Database filename (UTF-8) */

sqlite3_value *sqlite3_column_value(sqlite3_stmt*, int iCol);

 

int sqlite3_column_int(sqlite3_stmt*, int iCol);

db:数据指针

  sqlite3*,                                  /* An open database */

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

使的经过按照使用的函数大致分为如下几单过程:

 

flags:作为数据库连接的额外控制的参数,可以是SQLITE_OPEN_READONLY,SQLITE_OPEN_READWRITE和SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE中之一个,用于控制数据库的打开模式,可以与SQLITE_OPEN_NOMUTEXSQLITE_OPEN_FULLMUTEX, SQLITE_OPEN_SHAREDCACHE,以及SQLITE_OPEN_PRIVATECACHE构成使用,具体的详细情况可以查看文档

若是当实施sql语句被起荒唐有,那么当前底语句的尽为截至,后续之口舌为受超越了。第五单参数不也空的时节,它叫分配内存并形容副了错误音信,所以于sqlite3_exec前边要调用sqlite3_free去放活这一个目的为防范内存泄露

说明:

4.  sqlite3_column()

比方实施成功,则回SQLITE_OK,否则回一个错误码。推荐以近日外的先后中还使sqlite3_prepare_v2这一个函数,sqlite3_prepare只是用来前向兼容

);

sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol);

l  使用sqlite3_finalize()销毁之目的

        

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

UserName = kfqcome

         第六个参数是行中列数据的指针

 

l  ?NNN,NNN代表数字

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

  sqlite3 **ppDb,         /* OUT: SQLite db handle */

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

本条过程关闭前使用sqlite3_open打开的数据库连接,任何与这连续相关的准备告句必须以调用这一个闭馆函数以前受放飞

 

 

const void *sqlite3_column_blob(sqlite3_stmt*, int iCol);

         第四单参数是行中列名称的指针

此处进行sql语句用底是sqlite3_exec,它是前边两只函数的包装

ppStmt:可以利用sqlite3_step()执行之编译好之备选语句的指针,要是误发生,它叫置为NULL,如一旦输入的文本不包括sql语句。调用过程得顶在编译好的sql语句完成使用后动sqlite3_finalize()删除它。

 

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

 

?

);

 

sqlite3使用简介

l  :VVV,VVV代表字符

sqlite3_exec是sqlite3_prepare_v2,sqlite3_step()和sqlite3_finalize()的包装,能为程序往往行sql语句而不用写过多更的代码。

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

#include "stdafx.h"
#include "sqlite3.h"
static int callback(void *NotUsed, int argc, char **argv, char **azColName)
{
    int i;
    for(i=0; i<argc; i++){
       printf("%s = %s/n", azColName[i], argv[i] ? argv[i] : "NULL");
    }
    printf("/n");
    return 0;
}
#define CHECK_RC(rc,szInfo,szErrMsg,db) if(rc!=SQLITE_OK) /
           {printf("%s error!/n",szInfo);/
           printf("%s/n",szErrMsg);    /
           sqlite3_free(szErrMsg);         /
           sqlite3_close(db);              /
           return 0;}
int _tmain(int argc, _TCHAR* argv[])
{
  
    sqlite3 *db;
    char *dbPath="f:/test.db";
    char *szErrMsg = 0;
  
    int rc= sqlite3_open(dbPath, &db);
    CHECK_RC(rc,"open database",db);
    char *szSql="create table UserInfo(ID int primary key , UserName char, PassWord char);";
    rc=sqlite3_exec(db,szSql,0,0,&szErrMsg);
    CHECK_RC(rc,"create table",szErrMsg,db);
    rc=sqlite3_exec(db,"insert into UserInfo(ID,UserName,PassWord) values(1,'kfqcome','123456')",0,0,&szErrMsg);
    CHECK_RC(rc,"insert info",szErrMsg,db);
    rc=sqlite3_exec(db,"insert into UserInfo(ID,UserName,PassWord) values(2,'miss wang','654321')",0,0,&szErrMsg);
    CHECK_RC(rc,"insert info",szErrMsg,db);
    szSql="select * from UserInfo";
    rc = sqlite3_exec(db,szSql, callback, 0, &szErrMsg);
    CHECK_RC(rc,"query values",szErrMsg,db);
    sqlite3_close(db);
    getchar();
    return 0;
}

 

int sqlite3_prepare_v2(

  sqlite3 *db,            /* Database handle */

  • sqlite3_open()
  • sqlite3_prepare()
  • sqlite3_step()
  • sqlite3_column()
  • sqlite3_finalize()
  • sqlite3_close()

函数定义(仅排有UTF-8的)

  char **errmsg                              /* Error msg written
here */

ppDb:一个数据库连接句柄被归到者参数,尽管出误。唯一的相同会是一旦sqlite不克分配内存来存放在sqlite对象,ppDb将相会被归一个NULL值。

        

 

2.  Sqlite3_prepare()

         第二个参数是结果实施之列数

其一函数将sql文本转换成为一个准备语句(prepared statement)对象,同时重返这么些目的的指针。这一个接口需要一个数据库连接指针以及一个只要未雨绸缪的含有SQL语句的文件。它实际并无实施(evaluate)这么些SQL语句,它仅仅为履行准备这sql语句

备注

函数定义

横流:BLOB数据类型是负二进制的数据块,比如要在数据库中存放一张图纸,那张图就会合因为二进制情势存放,在sqlite中对应之数据类型就是BLOB

 

         语词对象的生命周期经历如此的长河:

  const char *zVfs        /* Name of VFS module to use */

  const char *filename,   /* Database filename (UTF-8) */

const char *sqlite3_errmsg(sqlite3*);

 

说明

         第一只参数经sqlite3_exec的第第两个参数传入的

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

 

3.  sqlite3_setp()

  int (*callback)(void*,int,char**,char**),  /* Callback function
*/

脚是八只最好安全与太简便易行的以政策

这一个经过会冲意况去转换数值的型,sqlite内部以sqlite3_snprintf()去自动举办这转换,下边是关于转换的细节表:

函数定义

int sqlite3_column_type(sqlite3_stmt*, int iCol);

l  通过调用sqlite3_step三次或累来实施之sql

int sqlite3_column_bytes16(sqlite3_stmt*, int iCol);

参数:

说明

int sqlite3_prepare(

);

斯过程用于执行有前方sqlite3_prepare成立的准备语句。这些讲话执行及结果的第一履可用的职。继续前行到结果的第二尽的语,只待另行调用sqlite3_setp()。继续调整用sqlite3_setp()知道之话完成,这一个未回结果的口舌(如:INSERT,UPDATE,或DELETE),sqlite3_step()只进行同样软就是赶回

 

nByte:假使nByte小于0,则函数取出zSql中自起初至第一个0终止符的内容;如若nByte不是恃的,那么她就是以此函数能起zSql中读取的字节数之尽丰盛价值。如若nBytes非负,zSql在率先蹩脚遇上’/000/或’u000’的时候截至

l  $VVV

返回值:

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

这多少个过程从举行sqlite3_step()执行一个预备报句拿到的结果集的脚下实践被回到一个列。每一遍sqlite3_step得到一个结出集的排停下后,这些过程就是可为一再调用去询问者执行之各列的价值。对列操作是生差不五个函数,均为sqlite3_column为前缀

UserName = miss wang

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

int sqlite3_column_bytes(sqlite3_stmt*, int iCol)int
sqlite3_column_bytes16(sqlite3_stmt*, int
iCol)两独函数再次回到对应列的始末之字节数,那一个字节数不包括后类型转换过程被加上的0终止符。

 

PassWord = 654321

  int flags,              /* Flags */

一经是要被辟的数据文件不有,则一个同名的数据库文件拿吃创造。如若以sqlite3_open和sqlite3_open_v2的讲话,数据库将拔取UTF-8的编码形式,sqlite3_open16运UTF-16的编码模式

 

);

l  以sqlite3——reset()重置这么些讲话,然后回第2步,这多少个历程做0不佳依然频繁

int (*callback)(void*,int,char**,char**),  /* Callback function
*/

1.  sqlite3_open():打开数据库

以sqlite中并从未概念sqlite3_stmt这多少个社团的具体内容,它仅是一个空洞类型,在利用过程被一般为其的指针举办操作,而sqlite3_stmt类型的指针在实际是一个对准Vdbe的构造体得指针

<2>宿主参数(host parameters)

ID = 2

Sqlite3_exec接口执行0或多独UTF-8编码的,分号分割的sql语句,传至第二单参数中。假如sqlite3_exec的老多只参数回调函数指针不也空,那么其会晤否每个来自实践之SQL语句的结果行调用(也就是说回调函数会调用多次,上边例子中碰面回到2独结果进行,由此会受实施2次),第4单参数是传染被回调函数的首先只参数,假设回调函数指针也空,那么回调不相会出同时结果实施被忽视。

立马多少个经过是概念上的说法,而休全是程序运行的过程,如sqlite3_column()表示的是本着查询拿到一行里面的多寡的排列的逐条操作统称,实际上以sqlite中连无有那么些函数。

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

未雨绸缪语句(prepared
statement)对象一个表示一个简便SQL语句对象的实例,这么些目的一般被称作“准备报句”或者“编译好之SQL语句”或者虽直接叫“语句子”。

二.运举例

 

int sqlite3_column_bytes(sqlite3_stmt*, int iCol);

函数的再次回到值基于创制sqlite3_stmt参数所采取的函数,假要是运用老版本的接口sqlite3_prepare()和sqlite3_prepare16(),再次回到值会是 SQLITE_BUSY, SQLITE_DONE, SQLITE_ROW, SQLITE_ERROR 或 SQLITE_MISUSE,而v2版本的接口sqlite3_prepare_v2()和sqlite3_prepare16_v2()则会同时重返那些结果码和扩充了果码。

 

参数说明:

double sqlite3_column_double(sqlite3_stmt*, int iCol);

  void *,                                    /* 1st argument to
callback */

  sqlite3 **ppDb          /* OUT: SQLite db handle */

int sqlite3_open_v2(

int sqlite3_open(

如果sqlite数据库让成功开拓(或创),将会见回到SQLITE_OK,否则用相会回来错误码。Sqlite3_errmsg()或者sqlite3_errmsg16方可用来取数据库打开错误码的英文描述,那一点儿单函数定义也:

int sqlite3_step(sqlite3_stmt*);

);

filename:需要为打开的数据库文件的文件称,在sqlite3_open和sqlite3_open_v2中是参数选取UTF-8编码,而以sqlite3_open16蒙固然利用UTF-16编码

如若sqlite,需要打sqlite官网下充斥到四只文件,分别吗sqlite3.lib,sqlite3.dll,sqlite3.h,然后再一次以融洽之工中布局好头文件和仓库文件,同时用dll文件放到当前目录下,就完事布局可以利用sqlite了。

内部类型

请求的类型

转换

NULL

INTEGER

结果是0

NULL

FLOAT

结果是0.0

NULL

TEXT

结果是NULL

NULL

BLOB

结果是NULL

INTEGER

FLOAT

从整形转换到浮点型

INTEGER

TEXT

整形的ASCII码显示

INTEGER

BLOB

同上

FLOAT

INTEGER

浮点型转换到整形

FLOAT

TEXT

浮点型的ASCII显示

FLOAT

BLOB

同上

TEXT

INTEGER

使用atoi()

TEXT

FLOAT

使用atof()

TEXT

BLOB

没有转换

BLOB

INTEGER

先到TEXT,然后使用atoi

BLOB

FLOAT

先到TEXT,然后使用atof

BLOB

TEXT

如果需要的话添加0终止符

 

 

l  @VVV

    int sqlite3_finalize(sqlite3_stmt
*pStmt);

首先单参数为自sqlite3_prepare再次回到来的prepared
statement对象的指针,第二参数指定这等同行吃的眷恋使让归的排的目。最左侧的如出一辙排列的索引号是0,行之列数可以应用sqlite3_colum_count()获得。

当操作数据库往日,首先要开辟数据库。这么些函数打开一个sqlite数据库文件之连而重回一个数据库连接对象。这一个操作以次中之首先只调用的sqlite函数,同时为是另sqlite
api的先决条件。许多底sqlite接口函数都亟需一个数据库连接对象的指针作为它们的率先只参数。

int sqlite3_reset(sqlite3_stmt *pStmt);

ID = 1

const void *sqlite3_column_text16(sqlite3_stmt*, int iCol);

“select ? from ?
“这个话中指定了一定量只参数,sqlite语句被之率先独参数的索引值是1,这虽清楚者讲话中之有限单参数的目录分别吗1与2,使用”?”的话语会给机关为予索引值,而接纳”?NNN”则可自己指定参数的索引值,它表示这些参数的索引值为NNN。”:VVV”表示一个叫做也”VVV”的参数,它吧发生一个索引值,被活动指定。

PassWord = 123456

这多少个过程销毁前面为sqlite3_prepare创设的准备语句,每个准备告句都须选择这函数去销毁以戒内存泄露。

  sqlite3 **ppDb          /* OUT: SQLite db handle */

 

typedef struct sqlite3_stmt
sqlite3_stmt;

网站地图xml地图