2011-01-10 47 views
0

我使用以下代碼插入數據之後插入到使用iphone sqllite - (無效)保存的{蔭得到錯誤中的sqlite3

AlarmData *alarm=[CallSettings getAlarm]; 
alarm.subject=subjectText.text; 
alarm.sound=tempDefault; 
NSDate *dat=[datePicker date]; 
NSString *da=(NSString *)[NSString stringWithFormat:@"%@",dat]; 
alarm.date=da; 

//alarmData.date=da; 
NSLog([CallSettings getAlarm].subject); 
NSLog([CallSettings getAlarm].no1); 
NSLog([CallSettings getAlarm].lname); 
NSLog([CallSettings getAlarm].name); 
NSLog([CallSettings getAlarm].date); 
NSLog([CallSettings getAlarm].sound); 


NSString *fullName=[NSString stringWithFormat:@"%@ %@",alarm.name,alarm.lname]; 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsPath = [paths objectAtIndex:0]; 
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"appointment.sql"]; 
sqlite3 *database; 
if(sqlite3_open([filePath UTF8String], &database) == SQLITE_OK) { 
    // Setup the SQL Statement and compile it for faster access 
    const char *sqlStatement = "select * from Alarm"; 

    sqlite3_stmt *compiledStatement; 

    if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) { 
     // Loop through the results and add them to the feeds array 

     compiledStatement=NULL; 

     const char *sql = "insert into Alarm(name) values ('Ahmed')"; 

     if(sqlite3_prepare_v2(database, sql, -1, &compiledStatement, NULL) != SQLITE_OK); 
     else { 
      if(SQLITE_DONE != sqlite3_step(compiledStatement)) 
       NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database)); 
      else 
       //SQLite provides a method to get the last primary key inserted by using sqlite3_last_insert_rowid 
       //coffeeID = sqlite3_last_insert_rowid(database); 
       NSLog(@"Value is inserted"); 
      // sqlite3_reset(compiledStatement); 
     } 
    } 




    } 




} 
sqlite3_close(database); 

} //結束保存方法

當呼叫這種方法應用崩潰和下面的錯誤發生

2011-01-10 19:23:56.307預約[521:207] *終止應用程序由於未捕獲的異常 'NSInvalidArgumentException',原因:「* + [NSString的stringWithUTF8St環:]:NULL CSTRING」 2011-01-10 19:23:56.321預約[521:207]堆棧:( 843263261, 825818644, 842812211, 842812115, 863177559, 21701, 844154820, 19557 , 846200172, 843020431, 844097412, 844097260, 844097204, 844096268, 844356084, 846188672, 862896011, 843011267, 843009055, 860901832,「SIGABRT」:843738160, 843731504, 10565,) 終止拋出的 'NSException' 程序實例接收信號後調用。 (GDB)

和應用程序不運行下一次,直到和除非我從設備上刪除應用程序,我覺得數據庫文件崩潰

+0

這是由於空列? – Ali 2011-01-10 14:37:06

回答

1

您應該使用sqlite3_finalize(compiledStatement),而不是compiledStatement = NULL; 只要閱讀文檔,你就會明白爲什麼。或者你可以使用另一個變量sqlite3_stmt,用於INSERT。