ios-issue with sqlite-database path

时间:2013-01-22 13:28:37

标签: iphone cocoa-touch xcode4.3

这是我的代码: 它适用于其他方法,但仅在此处创建问题。 在这里我无法插入数据...... 这里有什么问题?Code早先工作得很好。

-(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);
   }
}

1 个答案:

答案 0 :(得分: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也是正确的,你应该在访问它之前将数据库从应用程序包中复制出来,除非你以只读方式打开它(使用sqlite3_open_v2()并传入SQLITE_OPEN_READONLY作为其中一个旗帜)。