首页 > 解决方案 > 使用错误的列名更新/插入表 - iOS

问题描述

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

未插入值。错误:没有这样的列:电子邮件

我从这一行得到那个错误:

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] = ?,[postalcode] = ?,[email] = ?,[url] = ? 其中 id = 69

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

标签: iosobjective-csqlite

解决方案


为了创建你的表,你需要像这样创建它

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 命令


推荐阅读