-1

これが私のコードです。他の方法でも機能しますが、ここでのみ問題が発生します。ここでデータを挿入できません... ここで何が問題なのですか?コードは以前は完全に機能していました。

-(void) insertleadership {
[self trunleadership];
// Setup the database object
sqlite3 *database;
NSLog(@"Inside leadership");
if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
    // Setup the SQL Statement and compile it for faster access
    // NSString *query=[stringWithFormat: @"select name,password from customer where name=%@ and password=%@",*login_name,*login_pass];
    sqlite3_stmt *compiledStatement;
    for(int i=0;i<ltitle.count;i++)
    {
        // NSString *insertSQL = [NSString stringWithFormat:@"insert into category values(\'aa\',\'bb\',\'cc\',\'cc\',\'cc\')"];
        // NSLog(@"Inside leadership");
        NSString *insertSQL = [NSString stringWithFormat:@"insert into leadership values(\'%@\',\'%@\',\'%@\',\'%@\',\'%@\',\'%@\',\'%@\',\'%@\',\'%@\',\'%@\',\'%@\',\'%@\',\'%@\')",[ltitle objectAtIndex:i],[ldate objectAtIndex:i],[lfunction objectAtIndex:i],[lservice objectAtIndex:i],[lsubservice objectAtIndex:i],[labstract objectAtIndex:i],[ldoctype objectAtIndex:i],[lcreated objectAtIndex:i],[lcorridor objectAtIndex:i],[lfeature objectAtIndex:i],[lindiastory objectAtIndex:i],[lpublish objectAtIndex:i],[ltopic objectAtIndex:i]];
        // NSLog(@"SQL Query for leader:%@",insertSQL);
        const char *insert_stmt = [insertSQL UTF8String];
        // sqlite3_prepare_v2(databaseName, insert_stmt, -1, &statement, NULL);
        sqlite3_prepare_v2(database, insert_stmt, -1, &compiledStatement, NULL);
        if(sqlite3_step(compiledStatement) == SQLITE_DONE){
            NSLog(@"Insert into leadership successful");
        }
        else {
            NSLog(@"Unable to insert in leadership");
        }
        // Release the compiled statement from memory
        sqlite3_finalize(compiledStatement);
    }
    sqlite3_close(database);
   }
}
4

1 に答える 1

1

コードにレポートを追加すると、sqlite自体が開いていない理由を教えてくれます。

if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK)
{
    // Do something
    splite3_close(database);
}
else
{
    NSLog(@"Failed to open database '%@': %s", databasePath, sqlite3_errmsg(database));
}

また、@ HotLicksは、データベースを読み取り専用で開かない限り(フラグの1つとして使用sqlite3_open_v2()して渡すことにより)、アクセスする前にアプリバンドルからデータベースをコピーする必要があるという点で正しいです。SQLITE_OPEN_READONLY

于 2013-01-22T13:43:17.133 に答える