2013-02-12 100 views
0

我有數據庫,但是當我試圖從數據庫中刪除數據沒有任何反應,我該怎麼做才能確保它的工作?因爲當我按下刪除DTA仍然在數據庫無法從數據庫中刪除數據ios

這是代碼:

/file path to database 
    -(NSString*)filePath { 
     NSArray*paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     return [[paths objectAtIndex:0]stringByAppendingPathComponent:@"bp.sql"]; 
    } 

    //open database 
    -(void)openDB { 

     if(sqlite3_open([[self filePath]UTF8String], &db) !=SQLITE_OK) { 
      sqlite3_close(db); 
      NSAssert(0, @"Databese failed to open"); 
     } 

     else { 
      NSLog(@"database opemed"); 
     } 


    } 


    - (IBAction)del:(id)sender { 

     NSString*sql = [NSString stringWithFormat:@"DELETE key, theDate, customer, code1, code2 FROM summary WHERE key=\"%@\"",customerName]; 
     const char* query_stmt = [sql UTF8String]; 
     sqlite3_stmt*statement; 

     sqlite3_prepare_v2(db, query_stmt, -1, & statement, NULL); 
     if (sqlite3_step(statement) == SQLITE_DONE) 
     { 
      NSAssert(0, @"database object delete failed"); 

     } else { 
      NSLog(@"No error"); 

     } 
     sqlite3_finalize(statement); 
     sqlite3_close(db) 
+0

什麼是你想實現什麼?你是想刪除整行還是僅僅清除一行中的某些值? – zaph 2013-02-12 11:07:18

+0

是你的問題解決? – Rajneesh071 2013-02-12 12:06:58

+0

是問題解決:) – Thymen 2013-02-12 12:40:49

回答

3

不能刪除使用DELETE查詢特定的列值。它用於刪除整行。

enter image description here

的問題是用下面的查詢:

NSString*sql = [NSString stringWithFormat:@"DELETE key, theDate, customer, code1, code2 FROM summary WHERE key=\"%@\"",customerName]; 

將其更改爲:

NSString*sql = [NSString stringWithFormat:@"DELETE FROM summary WHERE key=\"%@\"",customerName]; 

如果您需要刪除行的特定列值使用UPDATE查詢。

請詢問詳細

+0

感謝您的幫助 – Thymen 2013-02-12 12:39:28

+0

@ user1980004:高興:)感謝您的幫助 – 2013-02-12 12:46:30

0

你寫像檢查文件路徑的所有功能檢查sqlite documentation,opendb應該發生在同一個函數(也許你德爾函數內)。

這是我會怎麼做:

-(void)updateStatus:(NSString *)queryString { 
    NSString *docsDir; 
    NSArray  *dirPaths; 
    dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    docsDir  = [dirPaths objectAtIndex:0]; 

    strDatabasePath   = [NSString stringWithString:[docsDir stringByAppendingPathComponent:@"bp.sql"]]; 
    NSFileManager *filemgr = [NSFileManager defaultManager]; 

    if ([filemgr fileExistsAtPath: strDatabasePath] == YES) 
    { 
     const char *dbpath = [strDatabasePath UTF8String]; 
     if (sqlite3_open(dbpath, &sqlDatabase) == SQLITE_OK) 
     { 
      const char* beginString = "BEGIN;"; 
      sqlite3_stmt *compiledstatement; 
      sqlite3_prepare_v2(sqlDatabase, beginString, -1, &compiledstatement, NULL); 
      if (sqlite3_step(compiledstatement) == SQLITE_DONE) {} 
      else DLog(@"Failed!"); 
      sqlite3_finalize(compiledstatement); 

      DLog(@"QUERY : %@",queryString); 

      const char *selectStatement = [queryString UTF8String]; 

      sqlite3_prepare_v2(sqlDatabase, selectStatement, -1, &compiledstatement, NULL); 
      //sqlite3_bind_text(compiledstatement,1,[statusString UTF8String],-1,SQLITE_TRANSIENT); 

      if (sqlite3_step(compiledstatement) == SQLITE_DONE) {} 
      else DLog(@"Failed!"); 
      sqlite3_finalize(compiledstatement); 


      const char* endString="END;"; 
      sqlite3_prepare_v2(sqlDatabase, endString, -1, &compiledstatement, NULL); 
      if (sqlite3_step(compiledstatement) == SQLITE_DONE) {} 
      else DLog(@"Failed!"); 
      sqlite3_finalize(compiledstatement); 

      sqlite3_close(sqlDatabase); 
     } 
     else DLog(@"Failed to open table"); 
    } 
} 

NSString *queryString; 
queryString = [NSString stringWithFormat:@"DELETE key, theDate, customer, code1, code2 FROM summary WHERE key=\"%@\"",customerName]; 
[self updateStatus:queryString]; 

希望這有助於...

0
-(BOOL)DeleteWishList:(int)rowno 
{ 

NSString *queryString=[NSString stringWithFormat:@"delete from wishtable where _id=%d",rowno]; 

[self openDB]; 
char *err; 
if (sqlite3_exec(dBObject, [queryString UTF8String], NULL,NULL, &err)!= SQLITE_OK) 
{ 
    sqlite3_close(dBObject);  
    return NO; 
} 
else 
{ 
    return YES; 
} 

}