1
아래 코드는 부분적으로 작동합니다. 그것 sqlite_master 테이블에있는 모든 테이블을 반환하고 그들을 삭제하기로되어 있습니다.SQLite_master 테이블을 반복하고 테이블을 삭제하십시오.
NSString *sql = [NSString stringWithFormat:@"SELECT name FROM sqlite_master WHERE type='table';"];
sqlite3_stmt *statement = [database prepare:sql];
if(statement != nil)
{
while(sqlite3_step(statement) == SQLITE_ROW)
{
NSString* currentTable = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 0)];
if ([currentTable rangeOfString:@"sqlite"].location == NSNotFound &&
[currentTable rangeOfString:@"Setting"].location == NSNotFound)
{
NSLog(@"current table: %@", currentTable);
[database deleteTable: currentTable];
}
}
sqlite3_finalize(statement);
}
그러나 [database deleteTable: currentTable];
를 호출 한 후 테이블이 삭제되지 않습니다. 왜이 [NSString stringWithFormat:@"DROP TABLE IF EXISTS '%@'", tableName]
입니다 :
삭제 테이블은 SQL을 받아들이는 sqlite3_exec
입니까? 그것은 내가 데이터베이스를 사용하고있는 루프에 있기 때문에 그렇습니까? 결과를 배열에 넣는 것이 더 좋을까요? 그런 식으로 반복하고 삭제하는 것보다 낫지 않습니까? 예외가 발생하지 않습니다/충돌 등 exec가 실행되고 있습니다.
나는 statment가 아니라 삭제시 sqlite3_exec를 마무리한다고 가정하십니까? – JonWells
예. 필자는 데이터베이스에 영향을주는 호출 후에 finalize를 호출해야한다는 것을 알게되었습니다. –