2013-01-22 62 views
-1

这是我的代码: 它适用于其他方法,但仅在此创建问题。 在这里,我无法插入数据... 这里有什么问题?代码工作得很好。ios-issue与sqlite数据库路径

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

几乎可以肯定你的“databasePath”是指包中的数据库。该软件包是只读的,在使用之前必须复制DB文件以读/写空间。 –

回答

1

如果你添加一些报告,以你的代码,源码本身会告诉你为什么它不开放:

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作为其中一个标志)打开它。