在开发一个嵌入式项目的时候用到数据库 选了sqlite3
而且用的是easysqlite(c++封装的接口)
测试过程中发现尽管代码中加了外键约束 但始终没有起作用
网上查了下 说sqlite3默认关闭外键的功能 需要手动打开
执行PRAGMA foreign_keys = ON;
在命令行下面是解决了,可是代码中怎么办....
找了好多网页都没有相关说明,然后突发奇想 将上面这条命令当作sql语句执行会怎样了(就相当于执行一条select语句)
结果竟然成功了,但是难道我必须要在打开数据库的时候都执行这条命令吗 不愿意善罢甘休
搜了下跟PRAGMA foreign_keys相关的源码 然后顺藤摸瓜 最终终于找到修改源码的地方
在sqlite3.c中的函数openDatabase里面在设置打开数据库标识的地方加上外键的标识就可以了
代码如下:
db->flags |= SQLITE_ShortColNames | SQLITE_AutoIndex
//enbale foreign key
#if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
|SQLITE_ForeignKeys
#endif