1

iOS プロジェクトに sqlite3 を使用しています。ログイン/ログアウト時に、データベース全体を再作成したい。(「テーブルから削除」を実行できますが、テーブルが 10 個まであり、さらにテーブルが必要な場合は、削除コードの記述にも注意する必要があります)だから、db の削除を検索しました。しかし、クエリでは実行できないことがわかりました。ファイルシステムから削除する必要があると言われています。私のコードは;

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSString *dbPathDB=[appDelegate getDBPath];//dbname.sqlite
//to remove the db
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath =  [documentsDirectory stringByAppendingPathComponent:@"dbname.sqlite"];

//both of them works same if([[NSFileManager defaultManager] fileExistsAtPath:filePath]){
if(filePath){
    NSLog(@"it is removed now");
    [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil];
}

//recreating the db
if (sqlite3_open([dbPathDB UTF8String], &database) == SQLITE_OK) {
    NSLog(@"db is created");

}

デバイスで試してみると、最初にログインしたとき (まだデータベースを削除していない) はすべて問題ありませんが、ログアウトして再度ログインすると、データの挿入に関するエラーが発生しました (ただし、db に接続できます。その部分は機能します。エラーは約です同じ行を再度挿入します)。

そして、デバイスを停止して再度実行し、ログインします。dbがクリーンであるため、挿入エラーは発生しません..dbファイルが削除されたように見えますが、dbはキャッシュまたはsthにありますか?同じデータベースを削除して作成し、エラーなしでデータを挿入するにはどうすればよいですか?

4

1 に答える 1

3

これは機能します:

-(void)removeDB {
    // Check if the SQL database has already been saved to the users phone
    // if not then copy it over
    BOOL success;
    NSError *error;
    NSFileManager *fileManager = [NSFileManager defaultManager];
    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    success = [fileManager fileExistsAtPath:[appDelegate getDBPath]];
    if(success) {
        [fileManager removeItemAtPath:[appDelegate getDBPath] error:&error];
        NSLog(@"This one is the error %@",error);
        return;
    }
    //recreating the db
    if (sqlite3_open([[appDelegate getDBPath] UTF8String], &database) == SQLITE_OK) {
        NSLog(@"db is created");
    }
}
于 2012-08-14T14:51:49.470 に答える