我已经能够使用相同的代码结构删除和重新加载表,但是遇到了这个表的问题。基本上我的代码打算做的是允许用户删除他们的自定义选择并恢复默认值。对于我无法放弃桌子的任何见解表示赞赏。
编辑:问题是没有丢失的初始表。我最终使用sqlite3_errmsg来解决这个问题。
- (void) dropReloadFoodlistTable{
const char *dbpath = [_databasePath UTF8String];
sqlite3_stmt *statement;
if (sqlite3_open(dbpath, &_profileDB) == SQLITE_OK)
{
NSString *querySQL = @"DROP TABLE FOODLIST";
const char *query_stmt = [querySQL UTF8String];
if (sqlite3_prepare_v2(_profileDB,
query_stmt, -1, &statement, NULL) == SQLITE_OK)
{
if (sqlite3_step(statement) == SQLITE_ROW)
{
NSLog(@"SQL Statement complete");
}
sqlite3_finalize(statement);
}
char *errMsg2;
const char *sql_stmt2 =
"CREATE TABLE IF NOT EXISTS FOODLIST (ID INTEGER PRIMARY KEY AUTOINCREMENT, CARB STRING, PROTEIN STRING, FAT STRING, FRUIT STRING, VEG STRING)";
if (sqlite3_exec(_profileDB, sql_stmt2, NULL, NULL, &errMsg2) != SQLITE_OK)
{
NSLog( @"Failed to create FOODLIST table");
}
sqlite3_close(_profileDB);
}
[self initialDataLoadFoodList];
}
答案 0 :(得分:0)
此代码不执行DROP TABLE
语句。
要执行预备声明,您必须致电sqlite3_step。
答案 1 :(得分:0)
您准备语句,但绝不使用sqlite3_step()
来实际执行它。