【问题标题】:How to enable Foreign Key constraint in SQLITE with Objective C如何使用 Objective C 在 SQLITE 中启用外键约束
【发布时间】:2014-08-11 08:04:01
【问题描述】:

今天我注意到我的 SQLite 表上的外键约束不起作用。在阅读 Stack Overflow 后,我发现应该启用此功能。所以,我一直在寻找代码 sn-p 来做这件事。到目前为止,我只能找到这个:

[self.db executeUpdate:@"PRAGMA foreign_keys=ON"];

但这似乎对我不起作用,因为编译器总是抱怨。我看到人们将这条线用于FMDatabase 类型(我什至不知道它是什么)。 那么,如果我像这样打开数据库连接,如何启用外键约束:

- (void) openDatabase
{
    const char* databaseFile = [[self pathToDatabaseFile:@"readlater.sql"] UTF8String];
    sqlite3 *connection;
    if (sqlite3_open(databaseFile, &connection) != SQLITE_OK) {
        return;
    }
    self.db = connection;
}

还是应该在创建表格时完成? 谢谢。

【问题讨论】:

  • FMDatabase 类是FMDB library 的一部分,FMDB library 是一个围绕 SQLite C API 的精简 Objective-C 包装器。使用 FMDB 可以大大简化你的 SQLite 代码。
  • @Rob,谢谢你帮我解决这个问题。我会仔细阅读。

标签: ios objective-c sqlite foreign-keys


【解决方案1】:

直接使用 SQLite C API 时,还必须使用 C 函数来执行 SQL 命令:

sqlite3_exec(connection, "PRAGMA foreign_keys = on", NULL, NULL, NULL);

【讨论】:

  • 您好,感谢您的回复。我应该在每个 SELECT/INSERT/... 语句之前插入这一行吗?
  • 必须做什么?我在应用程序启动时执行了PRAGMA foreign_keys = ON;,作为事务中的唯一语句,在下一个事务中我执行PRAGMA foreign_keys;,它仍然返回0。
  • @Ixx 要提问,请使用“”按钮。
  • 这个答案(“call sqlite3_exec()”)与你的问题不同。
猜你喜欢
  • 2011-05-14
  • 2015-09-22
  • 1970-01-01
  • 1970-01-01
  • 2014-01-17
  • 2013-05-03
  • 1970-01-01
  • 2012-02-03
相关资源
最近更新 更多