2013-04-08 3 views
0

это то, что я делаю в заголовкеПроблемы при удалении сырого из таблицы SQLite

static sqlite3 *database = nil; 
static sqlite3_stmt *deleteStmt = nil; 

@implementation SQLAppDelegate 

@synthesize window; 
@synthesize navigationController; 
@synthesize coffeeArray; 

это то, что я использую для удаления сырого

- (void) removeCoffee:(NSNumber *)coffeeObj { 

     NSLog(@"coffeeObj%@",coffeeObj); 

     int myInteger = [coffeeObj integerValue]; 
     NSLog(@"myInteger%d",myInteger); 
     // print this myInteger0 


     NSLog(@"%@",coffeeArray); 
     //print object 
    if (sqlite3_open([self getDBPath], &database) == SQLITE_OK) 
    {  
    NSLog(@"myInteger%@",[self getDBPath]); 

     NSString *sql = [NSString stringWithFormat: @"delete from Coffee where CoffeeID =%d",myInteger]; 

          const char *del_stmt = [sql UTF8String]; 
     NSLog(@"%@",del_stmt); // getting print 
// print this delete from Coffee where CoffeeID =0. 

          sqlite3_prepare_v2(database, del_stmt, -1, & deleteStmt, NULL); 
       NSLog(@"sqlite3_step(deleteStmt) ==   SQLITE_DONE%@",sqlite3_step(deleteStmt) == SQLITE_DONE); 

    // this print null 

          if (sqlite3_step(deleteStmt) == SQLITE_DONE) 
          { 
           //NSLog(@"hi") this is not getting print 

          } else { 
            //NSLog(@"hi") this is getting print 
          } 
          sqlite3_finalize(deleteStmt); 
          sqlite3_close(database); 
    [coffeeArray removeObjectAtIndex:myInteger]; 
     NSLog(@"%@",coffeeArray); 
     // object is deleted 
    } 
} 

моего стола как ниже

table name = Coffee 

CoffeeID(INTEGER)=0 

CoffeeName(VARCHAR)=Latte 

Price(REAL)=2.99 

где вещь отлично работает, объект удаляется из массива, и поэтому он не появляется в ячейке таблицы. но его не удаляются из таблицы базы данных, поэтому, когда я снова запускаю приложение, он снова показывает, пожалуйста, помогите, что я делаю неправильно.

+0

Put NSLog, если и еще состояние, когда вы сравните SQLITE_DONE и проверить, что он говорит! –

+0

его не происходит, если условие переходит из него sqlite3_finalize (deleteStmt); sqlite3_close (база данных); –

+0

Проверьте ответ от @Ganapathy, это должна быть проблема подключения. –

ответ

2

Перед тем как приступить к удалению объекта, необходимо сразу после того, как база данных будет открыта правильно или нет. Просто попробуй вот так.

//Setting path 
    NSArray *dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 

     NSString *docsDir = [dirPaths objectAtIndex:0]; 

    databasePath = [[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent: @"database.db"]]; 

    const char *dbpath=[databasePath UTF8String]; 

     if (sqlite3_open(dbpath, &database) == SQLITE_OK) 
     { 
     NSString *sql = [NSString stringWithFormat: @"delete from Coffee where CoffeeID =%d",myInteger]; 

          const char *del_stmt = [sql UTF8String]; 

          sqlite3_prepare_v2(database, del_stmt, -1, & deleteStmt, NULL); 
          if (sqlite3_step(deleteStmt) == SQLITE_DONE) 
          { 

          } else { 

          } 
          sqlite3_finalize(deleteStmt); 
          sqlite3_close(database); 
    [coffeeArray removeObjectAtIndex:myInteger]; 
     NSLog(@"%@",coffeeArray); 
     // object is deleted 

     } 
+0

Ganapathy я отредактировал мой вопрос, как вы сказали, пожалуйста, проверьте его снова –

+0

Итак, это утверждение if (sqlite3_open (dbpath, & database) == SQLITE_OK) истинно, как и сказано. У вас проверено? – Ganapathy

+0

dbpath это должен быть только путь или путь/SQL.sqlite? –

0
if(sqlite3_open([[self filepath] UTF8String], &db) == SQLITE_OK) 
    { 
     Deletestatement = nil; 

     if(Deletestatement == nil) 
     { 
      const char *sql = "delete from Sqlitemanager2;"; 

      if(sqlite3_prepare_v2(db, sql, -1, &Deletestatement, NULL) != SQLITE_OK) 
       NSAssert1(0, @"Error while creating delete statement. '%s'", sqlite3_errmsg(db)); 
     } 

     if (SQLITE_DONE != sqlite3_step(Deletestatement)) //prathibha for problem in if 
      NSAssert1(0, @"Error while deleting. '%s'", sqlite3_errmsg(db)); 

     sqlite3_finalize(Deletestatement); 

    } 
I hope this will help you. 
Смежные вопросы