原文地址:http://www.cnblogs.com/kfqcome/archive/2011/06/27/2136999.html

#include "stdafx.h"

#include "sqlite3.h"

static int callback(void *NotUsed, int argc, char **argv, char **azColName)

{

    int i;

    for(i=; i<argc; i++){

       printf("%s = %s/n", azColName[i], argv[i] ? argv[i] : "NULL");

    }

    printf("/n");

    return ;

}

#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 ;} int _tmain(int argc, _TCHAR* argv[]) { sqlite3 *db; char *dbPath="f:/test.db"; char *szErrMsg = ; 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,,,&szErrMsg); CHECK_RC(rc,"create table",szErrMsg,db); rc=sqlite3_exec(db,"insert into UserInfo(ID,UserName,PassWord) values(1,'kfqcome','123456')",,,&szErrMsg); CHECK_RC(rc,"insert info",szErrMsg,db); rc=sqlite3_exec(db,"insert into UserInfo(ID,UserName,PassWord) values(2,'miss wang','654321')",,,&szErrMsg); CHECK_RC(rc,"insert info",szErrMsg,db); szSql="select * from UserInfo"; rc = sqlite3_exec(db,szSql, callback, , &szErrMsg); CHECK_RC(rc,"query values",szErrMsg,db); sqlite3_close(db); getchar(); return ; }

  输出的结果:

ID = 1

UserName = kfqcome

PassWord = 123456

ID = 2

UserName = miss wang

PassWord = 654321

这里执行sql语句用的是sqlite3_exec,它是前面几个函数的封装

int sqlite3_exec(

sqlite3*,                                  /* An open database */

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

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

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

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

);

sqlite3_exec是sqlite3_prepare_v2,sqlite3_step()和sqlite3_finalize()的封装,能让程序多次执行sql语句而不要写许多重复的代码。

Sqlite3_exec接口执行0或多个UTF-8编码的,分号分割的sql语句,传到第二个参数中。如果sqlite3_exec的第三个参数回调函数指针不为空,那么它会为每个来自执行的SQL语句的结果行调用(也就是说回调函数会调用多次,上面例子中会返回2个结果行,因而会被执行2次),第4个参数是传给回调函数的第一个参数,如果回调函数指针为空,那么回调不会发生同时结果行被忽略。

如果在执行sql语句中有错误发生,那么当前的语句的执行被停止,后续的语句也被跳过。第五个参数不为空的时候,它被分配内存并写入了错误信息,所以在sqlite3_exec后面需要调用sqlite3_free去释放这个对象以防止内存泄露

回调函数:

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

第一个参数通过sqlite3_exec的第第四个参数传入的

第二个参数是结果行的列数

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

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

轻量级数据sqlite的C++调用示例的更多相关文章

  1. 股票数据调用示例代码php

    <!--?php // +---------------------------------------------------------------------- // | JuhePHP ...

  2. 效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中【附源代码下载】) 转

    效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中[附源代码下载])    本文目录: (一)背景 (二)数据库数据导入到Excel的方法比较   ...

  3. Restful.Data v1.0 - 轻量级数据持久层组件, 正式开源发布了

    经过几个星期的优化调整,今天 Restful.Data 正式开源发布. 源码地址:https://github.com/linli8/Restful 今天不写那么多废话了,还是重新介绍一下 Restf ...

  4. 基于JAVA的全国天气预报接口调用示例

    step1:选择本文所示例的接口"全国天气预报接口" url:https://www.juhe.cn/docs/api/id/39/aid/87step2:每个接口都需要传入一个参 ...

  5. JAVA的免费天气api接口调用示例

    step1:选择本文所示例的接口"免费天气api" url:https://www.juhe.cn/docs/api/id/39/aid/87 step2:每个接口都需要传入一个参 ...

  6. Windows API 调用示例

    Ø  简介 本文主要记录 Windows API 的调用示例,因为这项技术并不常用,属于 C# 中比较孤僻或接触底层的技术,并不常用.但是有时候也可以借助他完成一些 C# 本身不能完成的功能,例如:通 ...

  7. C#全能数据库操作类及调用示例

    C#全能数据库操作类及调用示例 using System; using System.Data; using System.Data.Common; using System.Configuratio ...

  8. 利用JavaScriptSOAPClient直接调用webService --完整的前后台配置与调用示例

    JavaScriptSoapClient下载地址:https://archive.codeplex.com/?p=javascriptsoapclient JavaScriptSoapClient的D ...

  9. 微信小程序通过api接口将json数据展现到小程序示例

    这篇文章主要介绍了微信小程序通过api接口将json数据展现到小程序示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧实现知乎客户端的一个重要知识前提就是,要知道怎么通过 ...

随机推荐

  1. La=LaULb (单链表)

    #include<stdio.h> typedef struct LNode { int data; struct LNode *next; }LNode,*LinkList; void ...

  2. 提高PHP编程效率

    1.如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍. 2.$row['id']的速度是$row[id]的7倍. 3.echo比print快,并且使用echo的多重 ...

  3. codeforces 451E. Devu and Flowers 容斥原理+lucas

    题目链接 给n个盒子, 每个盒子里面有f[i]个小球, 然后一共可以取sum个小球.问有多少种取法, 同一个盒子里的小球相同, 不同盒子的不同. 首先我们知道, n个盒子放sum个小球的方式一共有C( ...

  4. IOS 学习笔记(1) 视图UIViewController

    1.UIViewController *newController=[[UIViewController alloc] initWithNibName:@"XXX" bundle: ...

  5. LintCode-两数之和

    题目描述: 给一个整数数组,找到两个数使得他们的和等于一个给定的数target. 你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标.注意这里下标的范围是1到n,不是以 ...

  6. HeapAnalyzer

    https://www.ibm.com/developerworks/community/groups/service/html/communityview?communityUuid=4544baf ...

  7. 在OSX狮子(Lion)上安装MYSQL(Install MySQL on Mac OSX)

    这篇文章简述了在Mac OSX狮子(Lion)上安装MySQL Community Server最新版本v10.6.7的过程. MySQL是最流行的开源数据库管理系统.首先,从MySQL的下载页面上下 ...

  8. MBTI性格自测

    这两天身边许多朋友都在测一个叫做MBTI的测试,这个测试从动力.信息收集.决策方式.生活方式四个方面评价一个人. 我发现原来在日常的交往中的差异和冲突不是没理由的,也不是别人故意要为难你,而是因为不懂 ...

  9. Effective C++ 第二版 10) 写operator delete

    条款10 写了operator new就要同时写operator delete 写operator new和operator delete是为了提高效率; default的operator new和o ...

  10. HDU Computer Transformation1041 题解

    Problem Description A sequence consisting of one digit, the number 1 is initially written into a com ...