2012-06-14 198 views
0

基本上我必須輸入數據庫中的所有文本字段值,然後必須用於發送到webservice。因此,當一列詳細信息發送到服務時,必須刪除該列。 我已經這樣做了:從Sqlite數據庫刪除列

-(void)deleteTableDataFromSavedDataTable:(NSString *)lastID { 
    NSString *sql_str=[NSString stringWithFormat:@"DELETE FROM FormInfoValues where Phone = %@",lastID]; 

    const char *sql = [sql_str UTF8String]; 

    if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) 
    { 
     NSLog(@"sql delete statement is "); 

     sqlite3_stmt *deleteStmt; 
     if(sqlite3_prepare_v2(database, sql, -1, &deleteStmt, NULL) == SQLITE_OK) 
     { 
      NSLog(@"sql delete statement is %@", deleteStmt); 
      if(sqlite3_step(deleteStmt) != SQLITE_DONE) 
      { 
       NSLog(@"Error: %s", sqlite3_errmsg(database)); 
      } 
      else 
      { 
       NSLog(@"row id = %lld", (sqlite3_last_insert_rowid(database)+1)); 
       NSLog(@"No Error"); 
      } 
     } 
     sqlite3_finalize(deleteStmt); 
    } 
    sqlite3_close(database); 
} 

但它發送後沒有刪除。爲什麼它不打電話? 給我出出主意..

回答

1

它很可能我沒有正確理解您的問題 - 所以我提前道歉,如果如此。

關於:「......那麼必須刪除該列。」

- 如果要清除列中的數據(通過將其設置爲零或空字符串或NULL),則需要在SQL中使用UPDATE命令。 DELETE命令總是刪除ROWS。

- 如果你真的必須從表的模式中刪除列,你必須SQLite中創建一個新表。 (sqlite的,您可以通過ALTER TABLE命令添加一列,和一些其他的數據庫並允許您使用ALTER TABLE以及下降的一列。)您可以快速複製的表(沒有它的限制等),通過如:

CREATE TABLE MyOutput as MyOriginal中的SELECT a,b,d,f,h,z;

- 如果由SELECT語句創建你的輸出,只是避免使用「*」,並指定只是要包含的列。