我必须通过阅读来检查表格在创建之前是否存在 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;
}