使用错误的列名更新/插入表-iOS

时间:2018-06-22 16:24:49

标签: ios objective-c sqlite

我有一个包含5列的表,有时我会在该表中更新或插入新条目。我从json服务获取键/值,但是此服务又添加了一个字段,现在当我尝试在表中更新或插入新条目时出现错误:

  

未插入值。错误:没有这样的列:email

我从此行得到该错误:

sqlite3_prepare(_database, queryChar, -1, &statement, NULL);

if (sqlite3_step(statement) != SQLITE_DONE)
    NSLog(@"Values not inserted. Error: %s",sqlite3_errmsg(_database));

queryChar 具有以下格式:

  

更新内容SET [id] =?,[phone] =?,[name] =?,[websiteurl] =?,[邮政编码]   =?,[电子邮件] =?,[url] =? id = 69的哪里

我想知道哪种方法是解决此类错误的最有效方法。我应该检查表中是否存在每个列名,然后将其添加到queryChar吗?

1 个答案:

答案 0 :(得分:0)

要创建表格,您需要像

一样创建表格
CREATE TABLE IF NOT EXISTS MYTABLENAME(ID INTEGER PRIMARY KEY AUTOINCREMENT,id TEXT,TABLECOLUMN1 TEXT, TABLECOLUMN2 TEXT, TABLECOLUMN3 TEXT);

还必须更改数据库以在数据库中添加新列

[必须更改您的表以在以后在现有表中添加新列]

-(void)ChangeDB:(NSInteger)newDbVersion
{
    switch (newDbVersion)
    {
        case 1:
        {
            "ALTER TABLE MYTABLENAME ADD COLUMN NEWCOLUMNTOBEADD TEXT"
          //run this query in your sqlite 
        }
        break;
  default:
            break;
    }

}

这是从json提取数据后的更新查询,其中NEWCOLUMNTOBEADD是在运行时添加到数据库表中的新数据

update MYTABLENAME  set TABLECOLUMN1 ='%@', TABLECOLUMN2='%@', TABLECOLUMN3='%@',  NEWCOLUMNTOBEADD = '%@' where id ='%@'

有关ALTER command

的更多信息