加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

在sqlite3的回调函数中,一定要有return 0,不要省略,否则回调函数只执行一次

(2012-03-20 23:15:51)
标签:

杂谈

分类: C/Cplusplus
注意:在sqlite3的回调函数中,一定要有return 0,不要省略,否则回调函数只执行一次,不能将所有记录扫描。



下面给出一个例子,包含了创建数据库、表、插入、查询、删除操作

#include <stdio.h>
#include <stdlib.h> //exit等函数的声明
#include "/home/wl_haanel/software/sqlite_build/include/sqlite3.h"

int displaycb(void *para,int n_column,char **column_value,char **column_name);
int inquire_Usecb(sqlite3 *db);
int inquire_nocb(sqlite3 *db);
int createTable(sqlite3 *db);
int insertRecord(sqlite3 *db);
int deleteRecord(sqlite3 *db);
int displaycb(void *para,int n_column,char **column_value,char **column_name)
{
        int i = 0;
        printf("Total column is %d/n",n_column);
        for(i = 0;i<n_column;i++)
        {
                printf("字段名: %s---->字段值:%s/n",column_name[i],column_value[i]);

        }
        printf("==========================/n");
        return 0;
}
int inquire_Usecb(sqlite3 *db)
{
        char *sql;
        char *zErrMsg;
        sql = "select * from 'SensorData';";
        if(SQLITE_OK != sqlite3_exec(db,sql,displaycb,NULL,&zErrMsg))
        {
                printf("operate failed: %s/n",zErrMsg);
        }
        return 0;
}
int inquire_nocb(sqlite3 *db)
{

        int nrow = 0,ncolumn = 0;
        char **azResult=0;
        int i = 0;
        char *sql;
        char *zErrMsg;
        sql = "SELECT * FROM SensorData";
        if(SQLITE_OK != sqlite3_get_table(db,sql,&azResult,&nrow,&ncolumn,&zErrMsg))
        {
                printf("operate failed: %s/n",zErrMsg);
        }

        printf("row:%d column = %d/n",nrow,ncolumn);
        printf("The result of querying is :/n");
        for ( i = 0;i < ( nrow + 1) * ncolumn; i++)
                printf("azResult[%d] = %s/n",i,azResult[i]);
        sqlite3_free_table(azResult);
        return 0;
}
//创建表函数
int createnTable(sqlite3 *db)
{
        char *zErrMsg = 0;
        char *sql = "CREATE TABLE SensorData(/
                                 ID INTEGER PRIMARY KEY,/
                                 SensorID INTEGER,/
                                 SiteNum INTERER,/
                                 Time VARCHAR(12),/
                                 SensorParameter REAL /
                                 );";
        if(SQLITE_OK != sqlite3_exec(db,sql,0,0,&zErrMsg))
        {
                printf("operate failed: %s/n",zErrMsg);
        }
}
//插入数据函数
int insertRecord(sqlite3 *db)
{
        char *sql;
        char *zErrMsg;
        sql = "INSERT INTO 'SensorData' VALUES(NULL,1,1,'20100314',18.9);";
        if(SQLITE_OK != sqlite3_exec(db,sql,0,0,&zErrMsg))
        {
                printf("operate failed: %s/n",zErrMsg);
        }

        sql = "INSERT INTO 'SensorData' VALUES(NULL,1,1,'20100616',111);";
        if(SQLITE_OK != sqlite3_exec(db,sql,0,0,&zErrMsg))
        {
                printf("operate failed: %s/n",zErrMsg);
        }

        sql = "INSERT INTO 'SensorData' VALUES(NULL,1,1,'20110315',222);";
        if(SQLITE_OK != sqlite3_exec(db,sql,0,0,&zErrMsg))
        {
                printf("operate failed: %s/n",zErrMsg);
        }

}
//删除数据函数
int deleteRecord(sqlite3 *db)
{
        char *sql;
        char *zErrMsg;
        char **azResult=0;
        int nrow = 0,ncolumn = 0;
        int i;
        sql = "DELETE  FROM SensorData WHERE ID=1;";
        if(SQLITE_OK != sqlite3_exec(db,sql,0,0,&zErrMsg))
        {
                printf("operate failed: %s/n",zErrMsg);
        }

        sql = "SELECT * FROM SensorData;";
        if(SQLITE_OK != sqlite3_get_table(db,sql,&azResult ,&nrow,&ncolumn,&zErrMsg))
        {
                printf("operate failed: %s/n",zErrMsg);
        }
        printf("row:%d column:%d/n",nrow,ncolumn);
        printf("After deleting,the result of querying is :/n");
        for(i=0;i<(nrow+1)*ncolumn;i++)
                printf("azResult[%d] = %s/n",i,azResult[i]);
        sqlite3_free_table(azResult);
}
int main(void)
{
        sqlite3 *db = NULL;
        int rc;

        //打开指定的数据库文件
        rc = sqlite3_open("wldatabase.db",&db);
        if(rc)
        {
                fprintf(stderr,"can't open database: %s",sqlite3_errmsg(db));
                sqlite3_close(db);
                exit(1);
        }
        else
                printf("You have opened a sqlite3 database successfully!/n");

        createTable(db);
        insertRecord(db);
        //查询
        //使用sqlite3_get_table实现查询
        inquire_nocb(db);
        printf("ppppppppppppppppppppppppppppppppppp/n");
        //使用回调函数实现查询
        inquire_Usecb(db);
        deleteRecord(db);

        sqlite3_close(db);
        return 0;
}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有