热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

sqlite回调函数的解释与使用

>在sqlite3的api函数中有一个sqlite3_exec,用来执行sql语句:函数原型:intsqlite3_exec(sqlite3*ppDb,
>在sqlite3的api函数中有一个sqlite3_exec,用来执行sql语句:

函数原型:
int sqlite3_exec
(
sqlite3* ppDb, /* 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 */
);
第1个参数不再说了,是sqlite3_open函数得到的指针。
第2个参数constchar*sql是一条sql 语句,以\0结尾。
第3个参数sqlite3_callback 是回调,sqlite3每查询到一条结果,都会去调用你提供的这个函数。
第4个参数void*是你所提供的指针,你可以传递任何一个指针参数到这里,这个参数最终会传到回调函数里面,如果不需要传递指针给回调函数,可以填NULL。
第5个参数char** errmsg 是错误信息。注意是指针的指针。sqlite3里面有很多固定的错误信息。执行sqlite3_exec 之后,执行失败时可以查阅这个指针。
回调函数的格式:

int sqlite_callback(
void* pvoid, /* 由 sqlite3_exec() 的第四个参数传递而来 */
int argc, /* 表的列数 */
char** argv, /* 指向查询结果的指针数组, 可以由 sqlite3_column_text() 得到 */
char** col /* 指向表头名的指针数组, 可以由 sqlite3_column_name() 得到 */
);
在所有的回掉函数中,都要加上return 0;否则失去其回调函数的意义。

/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co., Ltd.
File name:
Author:Jerey_Jobs Version:0.1 Date:
Description:
Funcion List:
*****************************************************/

#include
#include
#include

int create_table(sqlite3 *db)
{
char *errmsg = NULL;
char *sql;

sql = "create table if not exists mytable(id integer primary key,name txt);";

if(SQLITE_OK != sqlite3_exec(db,sql,NULL,NULL,&errmsg))
{
printf("operater failed1 : %s \n",errmsg);
exit(0);
}
}

int insert_record(sqlite3 *db)
{
char *errmsg;
char sql[100];
char name[10];
int id;
int n;
int i;
printf("enter the number \n");
scanf("%d",&n);
for(i = 0; i {
printf("enter the id you want to insert :\n");
scanf("%d",&id);
printf("enter the name you want to insert :\n");
scanf("%s",name);

sprintf(sql,"insert into mytable(id,name) values(%d,'%s');",id,name);
if(SQLITE_OK != sqlite3_exec(db,sql,NULL,NULL,&errmsg))
{
printf("operater failed2 : %s \n",errmsg);
exit(0);
}
}

/* sql = "insert into mytable(id,name) values(NULL,'xie');";
if(SQLITE_OK != sqlite3_exec(db,sql,NULL,NULL,&errmsg))
{
printf("operater failed3 : %s \n",errmsg);
exit(0);
}

sql = "insert into mytable(id,name) values(NULL,'zhen');";
if(SQLITE_OK != sqlite3_exec(db,sql,NULL,NULL,&errmsg))
{
printf("operater failed4 : %s \n",errmsg);
exit(0);
}*/
}

int displaycb(void *para,int n_column,char **column_value,char **column_name)
{
int i;
printf("total column is %d \n",n_column);
for(i = 0;i {
// printf("\t\t %s \t\t %s \n",column_name[i],column_value[i]);
printf("column_name : %s ----> column_value : %s \n",column_name[i],column_value[i]);
}
return 0;
}

int inquire_usecb(sqlite3 *db)
{
char *errmsg;
char *sql;

sql = "select * from mytable;";

if(SQLITE_OK != sqlite3_exec(db,sql,displaycb,NULL,&errmsg))
{
printf("operater failed5 : %s \n",errmsg);
exit(0);
}
}
int delete_record(sqlite3 *db)
{
char *errmsg;
char sql[100];
int id;

printf("enter the id you want to delete\n");
scanf("%d",&id);

sprintf(sql,"delete from mytable where id = %d",id);

if(SQLITE_OK != sqlite3_exec(db,sql,NULL,NULL,&errmsg))
{
printf("operater failed6 :%s \n",errmsg);
exit(0);
}
}

int inquire_nocb(sqlite3 *db)
{
int nrow,ncolumn;
char **azresult;
char *sql;
char *errmsg;
int i;
sql = "select * from mytable;";
if(SQLITE_OK != sqlite3_get_table(db,sql,&azresult,&nrow,&ncolumn,&errmsg))
{
printf("operater failed : %s\n",errmsg);
exit(0);
}
printf("row :%d column :%d\n",nrow,ncolumn);
printf("the result of querying : \n");
for(i = 0;i <(nrow + 1) * ncolumn;i++)
{
printf("%10s",azresult[i]);
if((i + 1) % ncolumn == 0)
{
printf("\n");
}
}
sqlite3_free_table(azresult);
}
int main()
{
sqlite3 *db = NULL;
int ret;

ret = sqlite3_open("mydatabase.db",&db);

if(ret != SQLITE_OK)
{
perror("open error!\n");
exit(0);
}
else
{
printf("you have opened a qulite3 database successfully !\n");
}

create_table(db);
insert_record(db);
inquire_usecb(db);
delete_record(db);
inquire_nocb(db);
sqlite3_close(db);
return 0;
}

推荐阅读
  • 1简介本文结合数字信号处理课程和Matlab程序设计课程的相关知识,给出了基于Matlab的音乐播放器的总体设计方案,介绍了播放器主要模块的功能,设计与实现方法.我们将该设 ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • 本文总结了在编写JS代码时,不同浏览器间的兼容性差异,并提供了相应的解决方法。其中包括阻止默认事件的代码示例和猎取兄弟节点的函数。这些方法可以帮助开发者在不同浏览器上实现一致的功能。 ... [详细]
author-avatar
逃跑的骨拉拉gf_761
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有