加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

sqlite3_get_table()

发布时间:2020-12-13 00:01:00 所属栏目:百科 来源:网络整理
导读:from :http://blog.chinaunix.net/uid-26520343-id-3064257.html { sqlite3 * db ; char * errmsg = NULL ; //用来存储错误信息字符串 char ret = 0 ; int my_age ; //类型根据要提取的数据类型而定 char * * dbResult ; int nRow , nColumn ; / / nRow 查找

from :http://blog.chinaunix.net/uid-26520343-id-3064257.html

  1. {
  2. sqlite3*db;
  3. char*errmsg=NULL;//用来存储错误信息字符串
  4. charret=0;
  5. intmy_age;//类型根据要提取的数据类型而定
  6. char**dbResult;
  7. intnRow,nColumn;//nRow 查找出的总行数

  8. ret=sqlite3_open("student.db"&db);
  9. if(1=ret)/数据库创建未成功
  10. {
  11. fprintf(stderr"Can't open this database: %sn"(db;//用sqlite3_errmsg()得到错误字符串
  12. sqlite3_close;
  13. return-1}

  14. ret=sqlite3_get_table"select * from age;"&dbResult&nRow&nColumn&errmsg;

  15. (NULL!=errmsg)
  16. {
  17. sqlite3_free_table(dbResult;
  18. errmsg-1
  19. }

  20. my_age=atoi[nColumn];
  21. sqlite3_free_table;
  22. return 0}

sqlite3 *db创建数据库类型的指针,通过sqlite3_open()函数使db指针指向该数据库。

注意:

1、char **dbResult;字符型的二重指针,将数据库里sqlite3_get_table()出来的数据以字符的方式给dbResult。

2、select * from age;查询student数据库里的age表全部内容。

3、my_age = atoi(dbResult[nColumn]);将查询出来给dbResult的数据(字符)通过aoti()转换成整型交给变量my_age供程序中直接应用。

重点:(假设age表里有n个字段)

1、通过select * from age;给dbResult的字符前n个(0,n)为字段名称(只有计算机认识),dbResult[n]以后分别代表字段的值(包括dbResult[n])。如图

* * * * .........* (dbResult[0]~[n-1]分别代表字段名)

dbResult[n] [n+1] [n+2] [n+3].....[n+n-1] (dbResult[n]~[n+n-1]分别代表第一条记录的值)

dbResult[2n][2n+1][2n+2][2n+3]....[2n+n-1](dbResult[2n]~[2n+n-1]分别代表第二条记录的值)

dbResult[3n][3n+1][3n+2]32n+3]....[3n+n-1](dbResult[3n]~[3n+n-1]分别代表第三条记录的值)

注:sqlite3_get_table()之后便将以上的n(字段数:简称列)给了nColumn这个变量,可直接应用。nRow变量代表共有多少条记录,可直接应用。

2、通过select * from age where id=0;如果查到0条记录的话nRow等于0,查到1条记录的话nRow等于1,假设查到1条数据,举例:

注:此时dbResult[]只有0~2n-1共2n个字符,此时如果对dbResult[2n]引用的话就会出错。查询两条语句的话以此类推。

注:此时dbResult[]只有0~3n-1可引用。


二、

sqlite3_get_table使用举例

http://babybandf.blog.163.com/blog/static/61993532010326133751/
void GetTable() { sqlite3 * db; int result; char * errmsg = NULL; char **dbResult; //是 char ** 类型,两个*号 int nRow,nColumn; int i,j; int index; result = sqlite3_open( “c:Dcg_database.db”,&db ); if( result != SQLITE_OK ) { //数据库打开失败 return -1; } //数据库操作代码 //假设前面已经创建了 MyTable_1 表 //开始查询,传入的 dbResult 已经是 char **,这里又加了一个 & 取地址符,传递进去的就成了 char *** result = sqlite3_get_table( db,“select * from MyTable_1”,&dbResult,&nRow,&nColumn,&errmsg ); if( SQLITE_OK == result ) //查询成功 index = nColumn; //前面说过 dbResult 前面第一行数据是字段名称,从 nColumn 索引开始才是真正的数据 printf( “查到%d条记录n”,nRow ); for( i = 0; i < nRow ; i ) printf( “第 %d 条记录n”,i 1 ); for( j = 0 ; j < nColumn; j ) printf( “字段名:%s ?> 字段值:%sn”,dbResult[j],dbResult [index] ); index; // dbResult 的字段值是连续的,从第0索引到第 nColumn - 1索引都是字段名称,从第 nColumn 索引开始,后面都是字段值,它把一个二维的表(传统的行列表示法)用一个扁平的形式来表示 printf( “-------n” ); //到这里,不论数据库查询是否成功,都释放 char** 查询结果,使用 sqlite 提供的功能来释放 sqlite3_free_table( dbResult ); //关闭数据库 sqlite3_close( db ); return 0; } }*/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读