sqlite3_exec函数的使用
sqlite3_exec函数的使用
sqlite3数据库是一个小型的关系型的数据库,以文件的方式存在,打开文件即是打开数据库,它小巧且功能强大,在嵌入式领域内使用很广.现在就介绍一下其中一个重要函数的使用:
int sqlite3_exec(sqlite3 *db, const char *sql, sqlite3_callback callback, void *,char **errmsg);
功能:执行sql语句
参数:
db:数据库句柄
sql:sql语句
callback:回调函数,每成功执行一次sql语句就执行一次callback函数
void *:给回调函数传的参数
errmsg:错误信息
回调函数的定义:
typedef int(*sqlite3_callback)(void *, int, char **, char **);
很明显这是一个函数指针,具体说明参见程序注释,现在贴出程序,程序注释比较详细,很容易看懂,我就不多说了.程序执行的前提是我在本目录下有一个提前创建好的有两个数据条目的名字叫environment的数据表在数据库文件db.db中
- /**************************************************
- * 文件名称:main.c
- * 文件描述:测试sqlite3的sqlite3_exec函数的回调函数
- * 文件作者:by Wang.J,in 2013.11.06
- * 文件版本:1.0
- * 修改记录:
- **************************************************/
- #include <stdio.h>
- #include <stdlib.h>
- #include <sqlite3.h>
- #define DB_PATH "./db.db"
- /*=======================================
- * 函数名称:open_db
- * 函数功能:打开数据库文件
- * 函数参数:const char *path 数据库文件路径
- * 返 回 值:成功 sqlite3*
- 失败 NULL
- * 创 建 人:by Wang.J,in 2013.11.06
- * 修改记录:
- ========================================*/
- sqlite3 * open_db(const char *path)
- {
- sqlite3 *db = NULL;
- int ret = 0;
- ret = sqlite3_open(DB_PATH, &db);
- if (SQLITE_OK != ret) {
- printf("%s:数据库打开出错.\n错误原因:%s\n",
- __FUNCTION__, sqlite3_errmsg(db));
- sqlite3_close(db);
- return NULL;
- }
- printf("%s:数据库打开成功\n", __FUNCTION__);
- return db;
- }
- /*===================================================
- * 函数名称:close_db
- * 函数功能:关闭数据库文件
- * 函数参数:sqlite3 *
- * 返 回 值:void
- * 创 建 人:by Wang.J,in 2013.11.06
- * 修改记录:
- ====================================================*/
- void close_db(sqlite3 *db)
- {
- if (NULL != db)
- sqlite3_close(db);
- printf("%s:数据库关闭成功\n", __FUNCTION__);
- return;
- }
- /*======================================================
- * 函数名称:callback
- * 函数功能:sqlite3_exec的回调函数
- * 函数参数:void *param 传递给callback回调函数的参数
- 对应于sqlite3_exec函数的第四个参数
- int f_num 查找到的记录中包含的字段数目
- char **f_value 包含查找到每个记录的字段值
- char **f_name 包含查找到每个记录的字段名称
- * 返 回 值:成功返回0
- 失败返回-1
- * 创 建 人:by Wang.J,in 2013.11.06
- * 修改记录:
- =======================================================*/
- int callback(void *param, int f_num, char **f_value, char **f_name)
- {
- printf("%s:这是回调函数!\n", __FUNCTION__);
- return 0;
- }
- int main(void)
- {
- char sql[512];
- sqlite3 *db = NULL;
- char *err_msg;
- int ret = 0;
- printf("函数开始\n");
- sprintf(sql, "SELECT * FROM environment;");
- db = open_db(DB_PATH);
- ret = sqlite3_exec(db, sql, callback, NULL, &err_msg);
- printf("函数返回值:%d\n", ret);
- if (0 != ret) {
- //printf("函数执行失败\n");
- perror("函数执行失败\n");
- return -1;
- }
- close_db(db);
- printf("函数结束\n");
- return 0;
- }
程序执行结果
结果为预期结果.
现在看看给回调函数传参:
- /**************************************************
- * 文件名称:main.c
- * 文件描述:测试sqlite3的sqlite3_exec函数的回调函数
- * 文件作者:by Wang.J,in 2013.11.06
- * 文件版本:1.0
- * 修改记录:
- **************************************************/
- #include <stdio.h>
- #include <stdlib.h>
- #include <sqlite3.h>
- #define DB_PATH "./db.db"
- /*=======================================
- * 函数名称:open_db
- * 函数功能:打开数据库文件
- * 函数参数:const char *path 数据库文件路径
- * 返 回 值:成功 sqlite3*
- 失败 NULL
- * 创 建 人:by Wang.J,in 2013.11.06
- * 修改记录:
- ========================================*/
- sqlite3 * open_db(const char *path)
- {
- sqlite3 *db = NULL;
- int ret = 0;
- ret = sqlite3_open(DB_PATH, &db);
- if (SQLITE_OK != ret) {
- printf("%s:数据库打开出错.\n错误原因:%s\n",
- __FUNCTION__, sqlite3_errmsg(db));
- sqlite3_close(db);
- return NULL;
- }
- printf("%s:数据库打开成功\n", __FUNCTION__);
- return db;
- }
- /*===================================================
- * 函数名称:close_db
- * 函数功能:关闭数据库文件
- * 函数参数:sqlite3 *
- * 返 回 值:void
- * 创 建 人:by Wang.J,in 2013.11.06
- * 修改记录:
- ====================================================*/
- void close_db(sqlite3 *db)
- {
- if (NULL != db)
- sqlite3_close(db);
- printf("%s:数据库关闭成功\n", __FUNCTION__);
- return;
- }
- /*======================================================
- * 函数名称:callback
- * 函数功能:sqlite3_exec的回调函数
- * 函数参数:void *param 传递给callback回调函数的参数
- 对应于sqlite3_exec函数的第四个参数
- int f_num 查找到的记录中包含的字段数目
- char **f_value 包含查找到每个记录的字段值
- char **f_name 包含查找到每个记录的字段名称
- * 返 回 值:成功返回0
- 失败返回-1
- * 创 建 人:by Wang.J,in 2013.11.06
- * 修改记录:
- =======================================================*/
- int callback(void *param, int f_num, char **f_value, char **f_name)
- {
- printf("%s:这是回调函数!\n", __FUNCTION__);
- printf("%s:回调函数的参数内容:%s\n\n", __FUNCTION__, (char *)param);
- return 0;
- }
- int main(void)
- {
- char sql[512];
- sqlite3 *db = NULL;
- char *err_msg;
- int ret = 0;
- printf("函数开始\n");
- sprintf(sql, "SELECT * FROM environment;");
- db = open_db(DB_PATH);
- ret = sqlite3_exec(db, sql, callback, "回调函数参数,来自主程序", &err_msg);
- printf("函数返回值:%d\n", ret);
- if (0 != ret) {
- //printf("函数执行失败\n");
- perror("函数执行失败\n");
- return -1;
- }
- close_db(db);
- printf("函数结束\n");
- return 0;
- }
执行结果:
依旧没问题.
OK!基本就这些了.
sqlite3_exec函数的使用的更多相关文章
- 数据库(SQLITE3函数总结): sqlite3_open, sqlite3_exec, slite3_close,sqlite3_prepare_v2,sqlite3_column_text,
Sqlite3 的确非常好用.小巧.速度快.近期研究它,有一些收获,这里把我对 sqlite3 的研究列出来,以备忘记. 导入SQLLite library并引入头文件. libsqlite3.dyl ...
- sqlite入门基础(一):sqlite3_open,sqlite3_exec,slite3_close
打开数据库链接sqlite3_open用法 原型: int sqlite3_open( const char *filename, /* Database filename (UTF-8) */ sq ...
- SQLite3 C/C++ 开发接口简介(API函数)
from : http://www.sqlite.com.cn/MySqlite/5/251.Html 1.0 总览 SQLite3是SQLite一个全新的版本,它虽然是在SQLite 2.8.13的 ...
- SQLite3开发接口函数详解
SQLite3是SQLite一个全新的版本,它虽然是在SQLite 2.8.13的代码基础之上开发的,但是使用了和之前的版本不兼容的数据库格式和API. SQLite3是为了满足以下的需求而开发的: ...
- 数据库函数:sqlite3_exec() SQL语句
函数:sqlite3_exec(),称为便捷函数,封装了好多任务. 函数声明: int sqlite3_exec( sqlite * , const char * sql , sqlite_c ...
- SQLITE3 使用总结(直接使用C函数)
转载网址:http://blog.chinaunix.net/uid-8447633-id-3321394.html 前序: Sqlite3 的确很好用.小巧.速度快.但是因为非微软的产品,帮助文档总 ...
- sqlite3入门之sqlite3_open,sqlite3_exec,slite3_close
sqlite3_open sqlite3_open函数原型: int sqlite3_open( const char *filename, /* Database filename (UTF-8) ...
- 【原】FMDB源码阅读(二)
[原]FMDB源码阅读(二) 本文转载请注明出处 -- polobymulberry-博客园 1. 前言 上一篇只是简单地过了一下FMDB一个简单例子的基本流程,并没有涉及到FMDB的所有方方面面,比 ...
- iOS开发系列--数据存取
概览 在iOS开发中数据存储的方式可以归纳为两类:一类是存储为文件,另一类是存储到数据库.例如前面IOS开发系列-Objective-C之Foundation框架的文章中提到归档.plist文件存储, ...
随机推荐
- maven打成war包之后没有class文件
用maven打了war包之后部署到tomcat下居然无法执行,看了一下原来没有任何编译的.class文件. 查了一下,是自己手欠把source的src改成src.main.java之类的目录了,但是没 ...
- MSSQL死锁产生原因及解决方法
一. 什么是死锁 死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等的进 ...
- Ubuntu编写开机自启动脚本(转载)
From:http://blog.csdn.net/marujunyy/article/details/8466255 1.首先编写一个简单的shell脚本test.sh #! /bin/bash e ...
- dev 注册方法 z
工具栏注册方法: 1.将下面的内容保存为 bat文件,放到 Components\Tools\ 目录下,然后双击执行.注意,可能需要管理员权限. 忘了一点,components.xml 文件中的 P ...
- wpf mvvm使用问题集锦
问题一.usercontrol1控件使用了mvvm数据绑定,usercontrol2也使用了mvvm数据绑定,则 以下是伪代码 <usercontrol2 datacontent="{ ...
- arp -s 157.55.85.212 00-aa-00-62-c6-09 .... Adds a static entry.
ARp是一个重要的TCp/Ip协议,并且用于确定对应Ip地址的网卡物理地址.实用arp命令,我们能够查看本地计算机或另一台计算机的ARp高速缓存中的当前内容.此外,使用arp命令,也可以用人工方式输入 ...
- C++学习4
在C++中,定义函数时可以给参数指定一个默认的初始值.调用函数时,可以省略有默认值的参数.也就是说,如果用户指定了参数的值,那么就使用用户指定的值,否则使用参数的默认值. C++规定,默认参数只能放在 ...
- Python 之字节转换
# coding: utf-8 def bytes2human(n): """ >>> bytes2human(10000) 9K >>&g ...
- SecureCRT的背景和文字颜色的修改
options->;session options->;emulation->;terminal选择linux(相应的服务器系统)ansi color 打上钩options-> ...
- iOS 中@property() 括号中,可以填写的属性?
通过@property 和 @synthesize 属性可以简化设置器(set)和访问器(get) 的代码. 在@property 中又有那些属性呢? readwrite 默认 readonly 只读 ...