gpt4 book ai didi

c - Sqlite 外键

转载 作者:IT王子 更新时间:2023-10-29 06:25:35 26 4
gpt4 key购买 nike

我尝试使用 HDBC-sqlite3 haskell 库启用外键。这个库使用了一些辅助 c 函数

int sqlite3_open2(const char *filename, finalizeonce **ppo)

依次调用sqlite3_open一个。在sqlite documentation我找到了很好的 sqlite3_db_config 函数,它应该启用外键。为了测试它,我在 sqlite3_open2 中快速添加了 2 行( list 的最后两行):

int sqlite3_open2(const char *filename, finalizeonce **ppo) {
sqlite3 *ppDb;
finalizeonce *newobj;
int res, *resFK, resFK1;

fprintf(stderr, "DB pointer: %d\n", ppDb);

res = sqlite3_open(filename, &ppDb);

resFK1 = sqlite3_db_config(ppDb, 1002, 1, resFK);
fprintf(stderr, "\nForeign Keys: ON/OFF:%d ERR:%d\n", resFK, resFK1);

...

令我惊讶的是结果:Foreign Keys: ON/OFF:0 ERR:1

有人可以提示我做错了什么或者启用外键的正确方法是什么吗?

最佳答案

根据docs :

Assuming the library is compiled with foreign key constraints enabled, it must still be enabled by the application at runtime, using the PRAGMA foreign_keys command. For example:

sqlite> PRAGMA foreign_keys = ON;

Foreign key constraints are disabled by default (for backwards compatibility), so must be enabled separately for each database connection separately.

因此,在您的 sqlite3_open() 之后,您可能需要添加以下内容:

sqlite3_exec(ppDb, "PRAGMA foreign_keys = ON;", 0, 0, 0);

关于c - Sqlite 外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8407547/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com