2012-06-14 151 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语句创建你的输出,只是避免使用“*”,并指定只是要包含的列。