0

何らかの理由で、次のコードは sqlite データベースにデータを保存していません。リターン コードは SQLITE_DONE (101) であるため、エラー メッセージは表示されません。このメソッドは、データベースにいくつかの行を移入するために何度も呼び出されています。誰かが私が間違っているところを見ることができますか?

- (void)storePersonInDatabase:(Person *)person {
    const char *sql = "INSERT INTO PERSON (ID, NAME, NOTES, ADDRESS, PROMOTED, VEGETARIAN) values (?, ?, ?, ?, ?, ?)";
    sqlite3_stmt *statement;

    // Prepare the data to bind.
    NSData *imageData = person.imageData;
    NSString *personId = [person.personId stringValue];
    NSString *personName = person.name;
    NSString *address = person.address;
    NSString *notes = person.notes;
    NSString *isVegetarian = (person.isVegetarian) ? @"1" : @"0";
    NSString *isPromoted = (person.isPromoted) ? @"1" : @"0";

    // Prepare the statement.
    if (sqlite3_prepare_v2(database, sql, -1, &statement, NULL) == SQLITE_OK) {
        // Bind the parameters (note that these use a 1-based index, not 0).
        sqlite3_bind_text(statement, 1, [personId UTF8String], -1, SQLITE_TRANSIENT);
        sqlite3_bind_text(statement, 2, [personName UTF8String], -1, SQLITE_TRANSIENT);
        sqlite3_bind_text(statement, 3, [notes UTF8String], -1, SQLITE_TRANSIENT);
        sqlite3_bind_text(statement, 4, [address UTF8String], -1, SQLITE_TRANSIENT);
        sqlite3_bind_text(statement, 5, [isPromoted UTF8String], -1, SQLITE_TRANSIENT);
        sqlite3_bind_text(statement, 6, [isVegetarian UTF8String], -1, SQLITE_TRANSIENT);

    }

    // Execute the statement.
    int returnCode = sqlite3_step(statement);
    if (returnCode != SQLITE_DONE) {
        // error handling...
        NSLog(@"An error occoured");
    }

//これは私がデータベースをセットアップする方法です

NSString *sqliteDb = [[NSBundle mainBundle] pathForResource:@"Persons" ofType:@"sqlite"];
if(sqlite3_open([sqliteDb UTF8String], &database) != SQLITE_OK){
    NSLog(@"Unable to open database");
}
4

2 に答える 2

1

アプリバンドルでsqliteファイルを開こうとする方法を示します

アプリバンドルに書き込めません

アプリ バンドルは読み取り専用です

書き込み可能な場所にコピーする必要があります。ライブラリ/ドキュメントに移動する必要があるようです。

擬似コードは次のとおりです。

if(!sqlite_already_in_library) {
    [file_manager copyFileFrom:sqlite-in-bundle to:sqlite-in-library_path];
}
于 2013-05-17T12:57:46.973 に答える