2012-08-14 2 views
0

나는 방대한 양의 데이터를 sqlite 데이터베이스에 삽입해야하는 어플리케이션을 개발 중입니다. .. 데이터가 올바르게 삽입됩니다하지만 문제가 몇 번 내가이는 몇 번을 발생iPhone Sqlite insert in nsthread


Assertion failure in -[AttendeeDetails addData:anddbpath:], /Users/abhisheknaidu/Desktop/EventApp/AttendeeDetails.m:118 
2012-08-14 11:54:24.937 EventApp[3586:1770b] 

*Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Error while creating add statement. 'SQL logic error or missing database''

것을 예외가있다

여기 anyoneone 수 나를 도와 이 안에 ..

메신저 삽입을 위해 아래의 코드를 사용하십시오

사전에
- (void) addData:(NSMutableArray *)attendeeArray anddbpath:(NSString *)dbPath{ 

    NSString *str = @"Not Available"; 
    if(addStmt == nil) { 
      if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) { 

     const char *sql = "insert into AttendeeDetails(AtQRid , EventId , ImageUrl , FirstName , LastName , Company , Email , PhoneNumber , City , State , ATBarcodeID) Values(?,?,?,?,?,?,?,?,?,?,?)"; 
     if(sqlite3_prepare_v2(database, sql, -1, &addStmt, NULL) != SQLITE_OK) 
      NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(database)); 
     } 
     sqlite3_bind_text(addStmt, 1, [[attendeeArray valueForKey:@"Attendee_QR_ID"] UTF8String], -1, SQLITE_TRANSIENT); 
     sqlite3_bind_text(addStmt, 2, [[[[AppDelegate SharedInstance].DetailsOfEventArray valueForKey:@"Event_ID"] objectAtIndex:0] UTF8String], -1, SQLITE_TRANSIENT); 
     if ([attendeeArray valueForKey:@"Image_URL"] == [NSNull null]) { 
      sqlite3_bind_text(addStmt, 3, [str UTF8String], -1, SQLITE_TRANSIENT); 
     } 
     else { 
      sqlite3_bind_text(addStmt, 3, [[attendeeArray valueForKey:@"Image_URL"] UTF8String], -1, SQLITE_TRANSIENT); 
     } 
     sqlite3_bind_text(addStmt, 4, [[attendeeArray valueForKey:@"FirstName"] UTF8String], -1, SQLITE_TRANSIENT); 
     sqlite3_bind_text(addStmt, 5, [[attendeeArray valueForKey:@"LastName"] UTF8String], -1, SQLITE_TRANSIENT); 
     if ([attendeeArray valueForKey:@"Company"] == [NSNull null]) { 
      sqlite3_bind_text(addStmt, 6, [str UTF8String], -1, SQLITE_TRANSIENT); 
     } 
     else { 
      sqlite3_bind_text(addStmt, 6, [[attendeeArray valueForKey:@"Company"] UTF8String], -1, SQLITE_TRANSIENT); 
     } 

     if ([attendeeArray valueForKey:@"Email"] == [NSNull null]) { 
      sqlite3_bind_text(addStmt, 7, [str UTF8String], -1, SQLITE_TRANSIENT); 
     } 
     else { 
      sqlite3_bind_text(addStmt, 7, [[attendeeArray valueForKey:@"Email"] UTF8String], -1, SQLITE_TRANSIENT); 
     } 

     if ([attendeeArray valueForKey:@"PhoneNo"] == [NSNull null]) { 
      sqlite3_bind_text(addStmt, 8, [str UTF8String], -1, SQLITE_TRANSIENT); 
     } 
     else { 
      sqlite3_bind_text(addStmt, 8, [[attendeeArray valueForKey:@"PhoneNo"] UTF8String], -1, SQLITE_TRANSIENT); 
     } 


     if ([attendeeArray valueForKey:@"City"] == [NSNull null]) { 
      sqlite3_bind_text(addStmt, 9, [str UTF8String], -1, SQLITE_TRANSIENT); 
     } 
     else { 
      sqlite3_bind_text(addStmt, 9, [[attendeeArray valueForKey:@"City"] UTF8String], -1, SQLITE_TRANSIENT); 
     } 

     if ([attendeeArray valueForKey:@"State"] == [NSNull null]) { 
      sqlite3_bind_text(addStmt, 10, [str UTF8String], -1, SQLITE_TRANSIENT); 
     } 
     else { 
      sqlite3_bind_text(addStmt, 10, [[attendeeArray valueForKey:@"State"] UTF8String], -1, SQLITE_TRANSIENT); 
     } 

     if ([attendeeArray valueForKey:@"State"] == [NSNull null]) { 
      sqlite3_bind_text(addStmt, 10, [str UTF8String], -1, SQLITE_TRANSIENT); 
     } 
     else { 
      sqlite3_bind_text(addStmt, 10, [[attendeeArray valueForKey:@"State"] UTF8String], -1, SQLITE_TRANSIENT); 
     } 


     if ([attendeeArray valueForKey:@"State"] == [NSNull null]) { 
      sqlite3_bind_text(addStmt, 11, [str UTF8String], -1, SQLITE_TRANSIENT); 
     } 
     else { 
      sqlite3_bind_text(addStmt, 11, [[attendeeArray valueForKey:@"State"] UTF8String], -1, SQLITE_TRANSIENT); 
     } 

     if(SQLITE_DONE != sqlite3_step(addStmt)) 
      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); 

     //Reset the add statement. 
     sqlite3_reset(addStmt); 
    } 
    addStmt = nil; 

} 

덕분에

답변

0

난 당신이

dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 

    dispatch_async(concurrentQueue, ^{ 
     //this will call when you inserting in bg 


     dispatch_async(dispatch_get_main_queue(), ^{ 
      //this will call when inserting is finished 
     }); 
    }); 
+0

@ankur 난 아직 과 같은 예외가 파견 큐를 사용할 수 있다고 생각합니다 ***에서 어설 션 실패 - [AttendeeDetails는, addData : anddbpath :] , /Users/abhisheknaidu/Desktop/EventApp/AttendeeDetails.m:118 2012-08-14 12 : 46 : 25.771 EventApp [1020 : 1a03] *** 캐치되지 않은 예외 'NSInternalInconsistencyException'으로 인해 앱 종료 중, 이유 : 'while while 오류 add 문 작성 중. 'SQL 논리 오류 또는 누락 된 데이터베이스' ' 메신저 사용 중 – user1597244