SQLite数据库

要采纳sqlite,需要从sqlite官网下载到三个文件,分别为sqlite3.lib,sqlite3.dll,sqlite3.h,然后再在融洽的工程中配置好头文件和库文件,同时将dll文件放到当前目录下,就水到渠成布局可以运用sqlite了。
采用的经过依照使用的函数大致分成如下多少个过程:

  1. sqlite3_open()
  2. sqlite3_prepare()
  3. sqlite3_step()
  4. sqlite3_column()
  5. sqlite3_finalize()
  6. sqlite3_close()

这么些过程是概念上的传道,而不完全是程序运行的经过,如sqlite3_column()表示的是对查询拿到一行里面的数据的列的依次操作统称,实际上在sqlite中并不设有那个函数。

1. sqlite3_open():打开数据库

在操作数据库在此以前,首先要打开数据库。这么些函数打开一个sqlite数据库文件的连接并且重回一个数据库连接对象。那一个操作同时程序中的第一个调用的sqlite函数,同时也是另外sqlite
api的先决条件。许多的sqlite接口函数都需要一个数据库连接对象的指针作为它们的第一个参数。

int sqlite3_open(
const char *filename,   /* Database filename (UTF-8) */
sqlite3 **ppDb          /* OUT: SQLite db handle */
);

参数表明:
filename:需要被打开的数据库文件的文书名,在sqlite3_open和sqlite3_open_v2中那些参数拔取UTF-8编码,而在sqlite3_open16中则拔取UTF-16编码
ppDb:一个数据库连接句柄被再次回到到这一个参数,尽管暴发错误。唯一的一场是一旦sqlite无法分红内存来存放sqlite对象,ppDb将会被再次来到一个NULL值。

2. Sqlite3_prepare(): 准备数据库

其一函数将sql文本转换成一个备选语句(prepared
statement)对象,同时重返这多少个目的的指针。这一个接口需要一个数据库连接指针以及一个要预备的带有SQL语句的文书。它事实上并不执行(evaluate)那些SQL语句,它仅仅为执行准备这么些sql语句

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 */
);

参数:
db:数据句柄
zSql:sql语句,使用UTF-8编码
nByte:如若nByte小于0,则函数取出zSql中从开首到第一个0终止符的始末;如若nByte不是负的,那么它就是其一函数能从zSql中读取的字节数的最大值。假设nBytes非负,zSql在第一次相遇’/000/或’u000’的时候截止
pzTail:下面提到zSql在遭遇终止符或者是达标设定的nByte之后截至,假若zSql还有多余的内容,那么这些剩余的情节被寄存到pZTail中,不包括停止符

3. sqlite3_setp(): 数据库按步进行

其一历程用于实践有前方sqlite3_prepare创制的备选语句。这么些讲话执行到结果的首先行可用的岗位。继续上扬到结果的第二行的话,只需另行调用sqlite3_setp()。继续调用sqlite3_setp()知道这一个讲话完成,那么些不回去结果的说话(如:INSERT,UPDATE,或DELETE),sqlite3_step()只举行一遍就回去

int sqlite3_step(sqlite3_stmt*);
4. sqlite3_column(): 数据库查询

本条历程从实践sqlite3_step()执行一个预备语句得到的结果集的当前行中回到一个列。每一回sqlite3_step得到一个结果集的列停下后,这些进程就足以被频繁调用去查询这多少个行的各列的值。对列操作是有三个函数,均以sqlite3_column为前缀

const void *sqlite3_column_blob(sqlite3_stmt*, int iCol);
int sqlite3_column_bytes(sqlite3_stmt*, int iCol);
int sqlite3_column_bytes16(sqlite3_stmt*, int iCol);
double sqlite3_column_double(sqlite3_stmt*, int iCol);
int sqlite3_column_int(sqlite3_stmt*, int iCol);
sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol);
const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);
const void *sqlite3_column_text16(sqlite3_stmt*, int iCol);
int sqlite3_column_type(sqlite3_stmt*, int iCol);
sqlite3_value *sqlite3_column_value(sqlite3_stmt*, int iCol);

说明
先是个参数为从sqlite3_prepare重回来的prepared
statement对象的指针,第二参数指定这一行中的想要被再次来到的列的目录。最左侧的一列的索引号是0,行的列数可以应用sqlite3_colum_count()获得。

5. sqlite3_finalize: 销毁
int sqlite3_finalize(sqlite3_stmt *pStmt);

以此过程销毁前边被sqlite3_prepare创制的准备语句,每个准备语句都必须运用这个函数去销毁以预防内存泄露。
在空指针上调用这个函数没有什么样影响,同时可以准备语句的生命周期的任一时刻调用这些函数:在言语被实施前,五回或频繁调用sqlite_reset之后,或者在sqlite3_step任何调用之后不管语句是否到位实施

6. sqlite3_close: 关闭数据库
int sqlite3_close(sqlite3_stmt *pStmt);

以此进程关闭前面使用sqlite3_open打开的数据库连接,任何与这一个连续相关的备选语句必须在调用这些闭馆函数从前被放出


示例:

#include "stdafx.h"
<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 intoUserInfo(ID,UserName,PassWord)values(1,'zhangsan','666666')",0,0,&szErrMsg);
CHECK_RC(rc,"insert info",szErrMsg,db); 
rc=sqlite3_exec(db,"insert into UserInfo(ID,UserName,PassWord) values(2,'lisi','111111')",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;
}

输出的结果:
ID = 1
UserName = zhangsan
PassWord = 666666
ID = 2
UserName = lisi
PassWord = 111111

网站地图xml地图