注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

旷世的忧伤

不与夏虫语寒,不与曲人语道,因为生命缺乏言说的条件......

 
 
 

日志

 
 

sqlite3_get_table函数使用  

2014-11-06 11:42:47|  分类: 数据库操作 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
sqlite3_get_table函数用于查询数据库表中的数据:

原型:

int sqlite3_get_table(
    sqlite3 *db,          /* An open database */
    const char *zSql,     /* SQL to be evaluated */
    char ***pazResult,    /* Results of the query */
    int *pnRow,           /* Number of result rows written here */
    int *pnColumn,        /* Number of result columns written here */
    char **pzErrmsg       /* Error msg written here */
);

第1个参数为一个打开的数据库对象。
第2个参数是查询表的 sql 语句,是一个很普通的以\0结尾的char*字符串。
第3个参数是查询结果。其在访问时用一维数组的形式访问,我的理解是这里把二维数组线性化了。它内存布局是:字段名称,后面是紧接着是每个字段的值。
第4个参数是查询出的记录数(即查出多少行,***不包括字段名那行)。
第5个参数是多少个字段(多少列)。
第6个参数是错误信息,跟前面一样,这里不多说了。

查询出的表数据使用完后,需要将其释放:
void sqlite3_free_table(char **result);

示例:

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>


/*************************************************************************
* FuncName: main
* Input: None
* Output: None
* Val-Res: None
* Return: 0
* Brief: Main program body!
*************************************************************************/
int main(void)
{
sqlite3 *db;
char *errmg = NULL;
char **db_ret;
char *errmsg;
int row, column;
int i, j;

if (sqlite3_open("package.db", &db) != SQLITE_OK)
{
fprintf(stderr, "Cannot open this database\n");
exit(1);
}

if (sqlite3_get_table(db, "select * from world;", &db_ret, &row, &column, &errmsg) != SQLITE_OK)
{
fprintf(stderr, "Fail get table: %s\n", errmsg);
exit(0);
}
printf("row: %d\ncolumn: %d\n", row, column);
#if 0
int index = column; // 前面第一行数据是字段名称,从 column 索引开始才是真正的数据
for( i = 0; i < row ; i++ )
{
printf( "第 %d 条记录\n", i + 1 );
for( j = 0 ; j < column; j++ )
{
printf( "字段名:%s ?> 字段值:%s\n", db_ret[j], db_ret[index] );
index++;
// dbret 的字段值是连续的,从第0索引到第 nColumn - 1索引都是字段名称,
// 从第 column 索引开始,后面都是字段值,它把一个二维的表(传统的行列表示法)用一个扁平的形式来表示
}
printf( "-------\n" );
}
#endif
sqlite3_free_table( db_ret );
sqlite3_close(db);

return 0;
}


/************************ (C) COPYRIGHT HOUTY PRIVATE ********END OF FILE****/

  评论这张
 
阅读(5)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018