ios - 使用错误的列名更新/插入表 - 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 中?
解决方案
为了创建你的表,你需要像这样创建它
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 命令
推荐阅读
- reactjs - 身份服务器注册不会重定向回 React 应用程序
- javascript - 如何使用 moment.js 解析“date -u”(unix 日期命令,UTC)的输出?
- angular - 如何在Angular的构造函数中使用@Inject文本测试组件
- django - DJANGO 从生成的列表中选择 FORM 并添加一个额外的默认值
- java - 如何通过使用正则表达式排除同一内容中的内容来仅匹配圆括号
- python - 多个 python 脚本到一个可执行文件中
- python - 提供恒定输出的一维卷积网络
- apache-spark - 如何在“startingOffsets”中同时包含“最新”和“具有特定偏移量的 JSON”,同时将数据从 Kafka 导入 Spark 结构化流
- bash - 如何将只读变量范围限制为函数?
- python - 如果出现此错误,如何安装 tesseract-ocr