2011-12-20 5 views
3

ios Development를 처음 사용합니다. 테이블에서 레코드를 삭제하도록 도와 줄 수 있습니까? 데이터베이스와 쿼리가 정상적으로 보인다. 하지만 왜 레코드를 지우지 않는지 모르겠습니다. 내 콘솔에서 nslog "profile deleted"를 볼 수 있습니다. 미리 감사드립니다.sqlite 데이터베이스에서 레코드 삭제

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    self.str_databasePath = [documentsDirectory stringByAppendingPathComponent:@"MY_database.sqlite"]; 

    sqlite3 *database = nil; 

    if (sqlite3_open([self.str_databasePath UTF8String], &database) == SQLITE_OK) 
    { 
     NSLog(@"database opened : %@", profileType); 
     const char* sqlStatement; 
     if([profilerType isEqualToString:@"personal"]){ 
      sqlStatement = "DELETE FROM TABLE1 where profile_type = 'OWN_PERSONAL'"; 
     }else if([profilerType isEqualToString:@"corporate"]){ 
      sqlStatement = "DELETE FROM TABLE2 where profile_type = 'BANK_PROFILE'"; 
     } 
     sqlite3_stmt *statement; 

     if(sqlite3_prepare_v2(database, sqlStatement, -1, &statement, NULL) == SQLITE_OK) 
     { 
      NSLog(@"profile deleted "); 
      return YES; 
     }else{ 

      NSAssert1(0,@"Error: Failed to prepare statement with message %s '.", sqlite3_errmsg(database)); 
     } 


     // Finalize and close database. 
     sqlite3_finalize(statement); 
     sqlite3_close(database); 
    } 
    return NO; 
+0

핵심 데이터 프레임 워크를 살펴 보는 것이 좋습니다. 아마 SQL 대신 직접적으로 다루는 것이 더 좋은 옵션 일 것입니다. – HeikoG

+0

HeikoG 감사합니다.하지만 자세히 설명해 주시겠습니까? – dinesh

답변

2

쿼리를 준비 중이므로 결코 레코드를 삭제하지 않으므로 레코드를 삭제하지 않습니다.

당신은 준비 단계 및 마무리 수행하는 편리한 기능입니다 sqlite3_exec을 사용할 수 있습니다, 당신은 또한 sqlite3_step

를 호출해야합니다, 준비된 쿼리를 실행합니다.

3

HeikoG에 따르면 Core Data를 사용하는 것이 훨씬 쉽습니다. 핵심 데이터는 기본적으로 SQLite db이지만 사용하기가 훨씬 쉽습니다. 이 자습서를 살펴보십시오. http://www.raywenderlich.com/934/core-data-tutorial-getting-started

현재 코드를 다시 작성해야하는 경우에도 SQL을 직접 사용하는 대신 시간을 절약 할 수 있습니다.

관련 문제