1

Appdelegate.mこれは、データベースをコピーするために使用したコードです

- (void) copyDatabaseIfNeeded {

    NSFileManager *fileManager = [NSFileManager defaultManager];

    NSError *error;
    NSString *dbPath = [self getDBPath];

    BOOL success = [fileManager fileExistsAtPath:dbPath];


    if(!success) {

        NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"LocalSongs.sqlite"];
        success = [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error];

        if (!success)
            NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);
    }

}

そして、これはDBPathを取得するために使用されます

- (NSString *) getDBPath {


    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory , NSUserDomainMask, YES);
    NSString *documentsDir = [paths objectAtIndex:0];

    return [documentsDir stringByAppendingPathComponent:@"LocalSongs.sqlite"];


}

これが私のプレイリスト挿入方法です

-(NSString *)InsertPlaylist :(NSString *)PlaylistName
{
    NSLog(@"passed");
    NSString *status;


    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
    NSString *documentsDir = [paths objectAtIndex:0];
    NSString *dbPath=[[NSString alloc]initWithString:[documentsDir stringByAppendingPathComponent:@"LocalSongs.sqlite"]];

    NSLog(@"Database Path %@",dbPath);

    sqlite3_stmt    *statement;


    if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) {

        NSLog(@"open");

        NSString *insertSQL = [NSString stringWithFormat: @"INSERT INTO LOCALPLAYLIST (PLAYLISTNAME,getdate()) VALUES (\"%@\")",PlaylistName];

        const char *insert_stmt = [insertSQL UTF8String];
        sqlite3_prepare_v2(database, insert_stmt, -1, &statement, NULL);
        if (sqlite3_step(statement) == SQLITE_DONE)
        {
            status=@"Playlist Created";
        }

        else
        {
            status=@"Error occured";
        }


        return status;

    }
}

私が抱えている問題は、この prepare_v2 が常に notdone になることです。常にelse部分を実行します。

if (sqlite3_step(statement) == SQLITE_DONE)

これの何が問題なのですか?私を助けてください

4

1 に答える 1