【问题标题】:Is it safe to depend on SQLite pragma statements依赖 SQLite pragma 语句是否安全
【发布时间】:2014-05-16 02:25:18
【问题描述】:

我的 iOS 应用程序在与 SQLite 数据库交互时依赖特定 pragma 语句的功能是否安全?

根据SQLite documentation

在 SQLite 的未来版本中可能会删除特定的 pragma 语句并添加其他语句。不保证向后兼容。

但是,根据this upvoted SO answer

您可以使用编译指示来获取索引列:

PRAGMA 索引信息(索引名称);

这个是用来获取表的列名的:

PRAGMA 表信息(表名);

我的具体用例是我希望我的 iOS 应用程序在通过 FMDB SQLite 包装器进行查询之前检查特定列是否存在。我担心使用 PRAGMA table_info(table-name) 可能会在假设的未来 iOS 版本中产生意想不到的结果,其中包括更新版本的 SQLite,其中维护人员决定放弃对这个 pragma 语句的支持。

【问题讨论】:

  • 另一种选择是尝试准备一个仅查询表中那一列的语句。如果准备语句失败,您就知道该列不存在。也许在应用启动时做一次检查。
  • 感谢您的意见。这就是我现在打算做的事情(即SELECT column-name FROM table-name LIMIT 1 并检查错误)。

标签: ios sqlite mobile


【解决方案1】:

我会更倾向于使用:

FMResultSet* results = [database executeQuery:@"SELECT * FROM tableName LIMIT 0"];
if([[results columnNameToIndexMap] containsObject:@"testColumn"])

【讨论】:

  • 我现在看到的几乎就是你在我准备时决定做的事情。
  • 是的,非常相似。很好,不知道LIMIT 0 会起作用。也不知道-columnNameToIndexMap。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-07
  • 1970-01-01
  • 2010-12-28
  • 2012-03-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多