sqlite3 中使用 SELECT COUNT(*)的问题

时间:2022-04-26 23:57:01
想用 SELECT COUNT(*) AS AAAA FROM  TAB1 去判断表是否是空值,SQL语句我会写但是 不知道如何使用去拿到值

1.所用数据库为sqlite3 
2.网上搜索很多资料实在搜索不到,初用sqlite3,希望各位指点
3.希望能给出完整答案,在本站也看到问类似问题,但是回答的语言不统一, 还有很多变量、指针的来源我实在弄不清楚

例如:sqlite3_get_table(m_pDB, "SELECT * FROM T_STUDENT", &azResult, &nRow, &nColumn, &lpszErrMsg);这样的语句

因为sqlite3本身定义很多宏,我不知道如何用 只知道SQL语句不知道 如何应用到sqlite3上很苦恼

所用语言为C/C++

23 个解决方案

#1


sqlite3是马上东西。。。楼下帮忙解释。。 sqlite3 中使用 SELECT COUNT(*)的问题
偶去GG学习一下先

#2


学习

#3


sqlite3 是?


不懂

#4


up
引用 3 楼 js_szy 的回复:
sqlite3 是?


不懂

#5


额 就是SQLite 打错了

#6


引用 2 楼 fredrickhu 的回复:
学习


语句混淆 有点蒙 查了几个小时资料

#7


引用 3 楼 js_szy 的回复:
sqlite3 是?


不懂


是SQLite

#8


不懂,什么东西?帮顶.

#9


没错啊 是这个名字啊 - -很意外么

#10


基于 SQL 的 小型轻量级数据库

#11


主要是没听说过

#12


你需要用回调函数!

参考一下帮助文档中的这个例子。

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

static int callback(void *NotUsed, int argc, char **argv, char **azColName){
  int i;
  for(i=0; i<argc; i++){
    printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
  }
  printf("\n");
  return 0;
}

int main(int argc, char **argv){
  sqlite3 *db;
  char *zErrMsg = 0;
  int rc;

  if( argc!=3 ){
    fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT\n", argv[0]);
    exit(1);
  }
  rc = sqlite3_open(argv[1], &db);
  if( rc ){
    fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
    sqlite3_close(db);
    exit(1);
  }
  rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg);
  if( rc!=SQLITE_OK ){
    fprintf(stderr, "SQL error: %s\n", zErrMsg);
    sqlite3_free(zErrMsg);
  }
  sqlite3_close(db);
  return 0;
}


#13


引用 12 楼 acmain_chm 的回复:
你需要用回调函数!

参考一下帮助文档中的这个例子。

C/C++ code#include<stdio.h>
#include<sqlite3.h>staticint callback(void*NotUsed,int argc,char**argv,char**azColName){int i;for(i=0; i<argc; i++){
    printf("%s = %s\n", azColName[i], argv[i]? argv[i] :"NULL");
  }
  printf("\n");return0;
}int main(int argc,char**argv){
  sqlite3*db;char*zErrMsg=0;int rc;if( argc!=3 ){
    fprintf(stderr,"Usage: %s DATABASE SQL-STATEMENT\n", argv[0]);
    exit(1);
  }
  rc= sqlite3_open(argv[1],&db);if( rc ){
    fprintf(stderr,"Can't open database: %s\n", sqlite3_errmsg(db));
    sqlite3_close(db);
    exit(1);
  }
  rc= sqlite3_exec(db, argv[2], callback,0,&zErrMsg);if( rc!=SQLITE_OK ){
    fprintf(stderr,"SQL error: %s\n", zErrMsg);
    sqlite3_free(zErrMsg);
  }
  sqlite3_close(db);return0;
}

这个回调 函数 做什么的呢? 没明白 为什么必须用回调函数 如果我能看懂我就不问了我直接看源码
它的注释率很高 心急 。不用回调不能实现么?

#14


引用 10 楼 myndsc2009 的回复:
基于 SQL 的 小型轻量级数据库

建议不用,用处不大.

#15


引用 14 楼 dawugui 的回复:
引用 10 楼 myndsc2009 的回复:
基于 SQL 的 小型轻量级数据库

建议不用,用处不大.

我做mobile的,大数据库反而不实用,现在是学习阶段 - - 正做项目 遇到难题了  

#16


这个数据库 很出名的 windows上 也有用 因为很小 算法经典 注释率也高 ,小型的设备也经常用 - - ,我闪了, 用另种方法做。

#17


不用回调,那就用打开记录集的方法吧

#18


引用
这个回调 函数 做什么的呢? 没明白 为什么必须用回调函数 如果我能看懂我就不问了我直接看源码


SQLite提供的这个接口函数
sqlite3_exec(db, argv[2],  callback, 0, &zErrMsg);
中你需要把你自己的处理函数告诉它 比如例子中的 static int  callback(void *NotUsed, int argc, char **argv, char **azColName)
然后sqlite3_exec会对得到的查询结果中的每一行来调用这个 callback 函数。

你的 select count(*) 也是同样处理。你需要写一个callback函数,在这个callback函数中你可以把 count(*) 的返回值赋个某个公共变量然后再做下一步处理。

#19


回答 的不清晰 - - 我需要的是清晰答案 说含糊的词语我也会  结贴 

#20


我也遇到同样的问题,很明白你的感受,确实回答的很含糊,不知道你现在解决了没?
我也是边做项目边学的,遇到很多障碍。

#21


额已经根据逻辑 自己拟了一个函数 曲线救国。。

#22


别人说的很清楚了,用回调函数,连例子都有,代码都是现成的。
你自已试下就知道了。还要说别人讲得不明白。

#23


对当时的我来说是很困难的,我希望的是一个接口或者 一条语句, 你告诉我回调,我甚至回调是什么都不知道。

#1


sqlite3是马上东西。。。楼下帮忙解释。。 sqlite3 中使用 SELECT COUNT(*)的问题
偶去GG学习一下先

#2


学习

#3


sqlite3 是?


不懂

#4


up
引用 3 楼 js_szy 的回复:
sqlite3 是?


不懂

#5


额 就是SQLite 打错了

#6


引用 2 楼 fredrickhu 的回复:
学习


语句混淆 有点蒙 查了几个小时资料

#7


引用 3 楼 js_szy 的回复:
sqlite3 是?


不懂


是SQLite

#8


不懂,什么东西?帮顶.

#9


没错啊 是这个名字啊 - -很意外么

#10


基于 SQL 的 小型轻量级数据库

#11


主要是没听说过

#12


你需要用回调函数!

参考一下帮助文档中的这个例子。

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

static int callback(void *NotUsed, int argc, char **argv, char **azColName){
  int i;
  for(i=0; i<argc; i++){
    printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
  }
  printf("\n");
  return 0;
}

int main(int argc, char **argv){
  sqlite3 *db;
  char *zErrMsg = 0;
  int rc;

  if( argc!=3 ){
    fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT\n", argv[0]);
    exit(1);
  }
  rc = sqlite3_open(argv[1], &db);
  if( rc ){
    fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
    sqlite3_close(db);
    exit(1);
  }
  rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg);
  if( rc!=SQLITE_OK ){
    fprintf(stderr, "SQL error: %s\n", zErrMsg);
    sqlite3_free(zErrMsg);
  }
  sqlite3_close(db);
  return 0;
}


#13


引用 12 楼 acmain_chm 的回复:
你需要用回调函数!

参考一下帮助文档中的这个例子。

C/C++ code#include<stdio.h>
#include<sqlite3.h>staticint callback(void*NotUsed,int argc,char**argv,char**azColName){int i;for(i=0; i<argc; i++){
    printf("%s = %s\n", azColName[i], argv[i]? argv[i] :"NULL");
  }
  printf("\n");return0;
}int main(int argc,char**argv){
  sqlite3*db;char*zErrMsg=0;int rc;if( argc!=3 ){
    fprintf(stderr,"Usage: %s DATABASE SQL-STATEMENT\n", argv[0]);
    exit(1);
  }
  rc= sqlite3_open(argv[1],&db);if( rc ){
    fprintf(stderr,"Can't open database: %s\n", sqlite3_errmsg(db));
    sqlite3_close(db);
    exit(1);
  }
  rc= sqlite3_exec(db, argv[2], callback,0,&zErrMsg);if( rc!=SQLITE_OK ){
    fprintf(stderr,"SQL error: %s\n", zErrMsg);
    sqlite3_free(zErrMsg);
  }
  sqlite3_close(db);return0;
}

这个回调 函数 做什么的呢? 没明白 为什么必须用回调函数 如果我能看懂我就不问了我直接看源码
它的注释率很高 心急 。不用回调不能实现么?

#14


引用 10 楼 myndsc2009 的回复:
基于 SQL 的 小型轻量级数据库

建议不用,用处不大.

#15


引用 14 楼 dawugui 的回复:
引用 10 楼 myndsc2009 的回复:
基于 SQL 的 小型轻量级数据库

建议不用,用处不大.

我做mobile的,大数据库反而不实用,现在是学习阶段 - - 正做项目 遇到难题了  

#16


这个数据库 很出名的 windows上 也有用 因为很小 算法经典 注释率也高 ,小型的设备也经常用 - - ,我闪了, 用另种方法做。

#17


不用回调,那就用打开记录集的方法吧

#18


引用
这个回调 函数 做什么的呢? 没明白 为什么必须用回调函数 如果我能看懂我就不问了我直接看源码


SQLite提供的这个接口函数
sqlite3_exec(db, argv[2],  callback, 0, &zErrMsg);
中你需要把你自己的处理函数告诉它 比如例子中的 static int  callback(void *NotUsed, int argc, char **argv, char **azColName)
然后sqlite3_exec会对得到的查询结果中的每一行来调用这个 callback 函数。

你的 select count(*) 也是同样处理。你需要写一个callback函数,在这个callback函数中你可以把 count(*) 的返回值赋个某个公共变量然后再做下一步处理。

#19


回答 的不清晰 - - 我需要的是清晰答案 说含糊的词语我也会  结贴 

#20


我也遇到同样的问题,很明白你的感受,确实回答的很含糊,不知道你现在解决了没?
我也是边做项目边学的,遇到很多障碍。

#21


额已经根据逻辑 自己拟了一个函数 曲线救国。。

#22


别人说的很清楚了,用回调函数,连例子都有,代码都是现成的。
你自已试下就知道了。还要说别人讲得不明白。

#23


对当时的我来说是很困难的,我希望的是一个接口或者 一条语句, 你告诉我回调,我甚至回调是什么都不知道。