不调用sqlite3_exec回调

时间:2015-06-04 14:52:45

标签: c++ sqlite callback

我必须通过阅读来检查表格在创建之前是否存在 How do I check in SQLite whether a table exists?,我使用sqlite3_exec与

进行一步查询
  

SELECT name FROM sqlite_master WHERE type =' table'和名字   ='表1&#39 ;;

并使用回调设置标志来标识表是否存在。 不幸的是,如果尚未创建表,则不会调用回调。

为什么没有调用回调?我知道没有输出结果的查询不会调用回调,例如"创建表"等,只用" SELECT"查询。但我不知道它甚至可能不被要求" SELECT"。

以下是重现问题的代码示例。

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

bool isExist=false;
static int callback(void *NotUsed, int argc, char **argv, char **azColName){      
  printf("I am being called\n");
  if (argc>0) isExist = true;
  return 0;
}

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

  rc = sqlite3_open("test.db", &db);
  if( rc ){
    fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
    sqlite3_close(db);
    return(1);
  }

  //char* sqlCreateTable = "CREATE TABLE table1(name TEXT);";
  //rc = sqlite3_exec(db, sqlCreateTable, callback, 0, &zErrMsg);

  // callback will not be called if table is not yet created
  char* sql_hasTable = "SELECT name FROM sqlite_master WHERE type = 'table' AND name ='table1';";
  rc = sqlite3_exec(db, sql_hasTable, callback, 0, &zErrMsg);
  if( rc!=SQLITE_OK ){
    fprintf(stderr, "SQL error: %s\n", zErrMsg);
    sqlite3_free(zErrMsg);
  }
  sqlite3_close(db);
  return 0;
}

0 个答案:

没有答案