【SQLite_7】sqlite3_get_table()函数

转载 2018年04月16日 21:59:43
  1. {  
  2.  sqlite3 *db;  
  3.  char *errmsg=NULL;    //用来存储错误信息字符串  
  4.  char ret=0;  
  5.  int my_age=0;    //类型根据要提取的数据类型而定  
  6.  char **dbResult;  
  7.  int nRow=0, nColumn=0;     //nRow 查找出的总行数,nColumn 存储列  
  8.   
  9.  ret = sqlite3_open("student.db",&db);  
  10.  if(1 == ret)     //数据库创建未成功  
  11.  {  
  12.   fprintf(stderr, "Can't open this database: %s\n"sqlite3_errmsg(db));    //用sqlite3_errmsg()得到错误字符串  
  13.   sqlite3_close(db);  
  14.   return -1;  
  15.  }  
  16.   
  17.  ret=sqlite3_get_table(db, "select * from age;", &dbResult, &nRow, &nColumn, &errmsg);  
  18.   
  19.  if(NULL!=errmsg)  
  20.  {  
  21.   sqlite3_free_table(dbResult);  
  22.   errmsg=NULL;  
  23.   return -1  
  24.  }  
  25.   
  26.  my_age = atoi(dbResult[nColumn]);  
  27.  sqlite3_free_table(dbResult);  
  28.  return 0;  
  29. }  

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]~[n-1]分别代表字段名)

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

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

           *      *      *      * .........*  (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[]只有0~3n-1可引用。

sqlite C++ 的sqlite3_get_table函数使用

最近项目中需要使用sqlite,发现纯风格的函数使用起来确实难受,就简答了做了一个封装下面是代码: bool xxx::fun_sqlite3_get_table(std::function f, s...
  • u012453032
  • u012453032
  • 2017-11-17 09:11:03
  • 131

sqlite3_get_table()函数

 [objc] view plain copy print? {   sqlite3 *db;   charchar *errmsg=NULL;    //用来...
  • wujiafei_njgcxy
  • wujiafei_njgcxy
  • 2016-12-16 18:59:00
  • 2304

linux下sqlite数据库用c语言sqlite3_get_table查询数据

#include #include #include /* 使用sqlite3_get_table获取数据 */ int main(void) { sqlite3 *conn;/*句...
  • HES_C
  • HES_C
  • 2017-05-16 15:03:15
  • 428

sqlite3_get_table 的函数使用

[objc] view plain copy   {    sqlite3 *db;    charchar *errmsg=NULL;    //用来存储错误信息字符...
  • hello_world6
  • hello_world6
  • 2016-12-22 22:02:03
  • 186

linux 下sqlite的 C编程之sqlite3_get_table

{ sqlite3 *db; char *errmsg=NULL; //用来存储错误信息字符串 char ret=0; int my_age=0; ...
  • best_fiends_zxh
  • best_fiends_zxh
  • 2016-12-16 18:06:32
  • 803

sqlite3_get_table()

{  sqlite3 *db;  char *errmsg=NULL;    //用来存储错误信息字符串  char ret=0;  int my_age=0;    //类...
  • dyzok88
  • dyzok88
  • 2014-12-22 18:21:22
  • 730

[挖坑]sqlite数据库中的sqlite3_get_table接口为什么不建议使用

挖坑待填
  • lucif0908
  • lucif0908
  • 2012-06-20 12:02:42
  • 449

sqlite3_get_table使用举例

本文转自http://babybandf.blog.163.com/blog/static/61993532010326133751 void GetTable() { ...
  • longzhongren
  • longzhongren
  • 2013-08-27 22:35:17
  • 1290

用sqlite3_get_table得到一个表

一直都没怎么用这个函数,今天试用了下,用ltrace跟踪时,发现效率比较低,因为它封装了sqlite3_exec这些函数,而sqlite3_exec又调用了sqlite3_prepare等,看来还是得...
  • b06050701
  • b06050701
  • 2010-08-11 10:41:00
  • 4245

嵌入式 linux下sqlite的C编程之sqlite3_get_table

说明:通过sqlite3_get_table查询得到的结果,其结构是:第一行是列名,随后的行才是值。遍历的方式和二维数组相同。 #include #include #include ...
  • skdkjxy
  • skdkjxy
  • 2014-09-12 16:52:19
  • 1301
收藏助手
不良信息举报
您举报文章:【SQLite_7】sqlite3_get_table()函数
举报原因:
原因补充:

(最多只允许输入30个字)