在iOS的sqlite3中,ON DELETE CASCADE无法正常工作

问题描述 投票:5回答:2

我通过如下方式在ios中以编程方式在.sqlite文件中创建了一个.sqlite文件,]

    NSFileManager *theFileManager = [NSFileManager defaultManager];
    if ([theFileManager fileExistsAtPath:[self getDatabasePath]] == NO)
    {
        char *theError;
        const char *databasePath = [[self getDatabasePath] UTF8String];
        const char *enableForienKey = [@"PRAGMA foreign_keys = ON;" UTF8String];

        if (sqlite3_open(databasePath, &mDatabase) == SQLITE_OK)
        {
            if (sqlite3_exec(mDatabase, enableForienKey, NULL, NULL, &theError)!=SQLITE_OK)
            {
                DEBUGLOG(kCreateTableError,sqlite3_errmsg(mDatabase));
            }
            sqlite3_close(mDatabase);
        }
        else {
            DEBUGLOG(KFailedToCreateDBFile);
        }
    }

Pragma外键已启用,但是我创建了如下两个表,其中包含创建查询,包括ON DELETE CASCADE//第一个表创建查询

   @"CREATE TABLE IF NOT EXISTS Session (sessionAppID INTEGER PRIMARY KEY  NOT NULL , sessionID VARCHAR(255) NOT NULL, userAppID INTEGER, deviceAppID INTEGER NOT NULL, sessionStartTime VARCHAR(255) NOT NULL, sessionEndTime VARCHAR(255), sessionCreatedDateTime VARCHAR(200) NOT NULL,sessionUpdatedDateTime VARCHAR(200) NOT NULL, sessionFailureCount INTEGER NOT NULL,sessionStatus INTEGER NOT NULL, FOREIGN KEY(userAppID) REFERENCES User(userAppID), FOREIGN KEY(deviceAppID) REFERENCES Device(deviceAppID))"

//第二张表是第一张表查询的子表

 @"CREATE TABLE IF NOT EXISTS EventLog (eventLogAppID INTEGER PRIMARY KEY  NOT NULL , eventGUID VARCHAR(255) NOT NULL, sessionAppID INTEGER NOT NULL , eventName VARCHAR(255) NOT NULL, eventGroupGUID VARCHAR(255), eventParentGUID VARCHAR(255), eventCategory INTEGER NOT NULL,eventStartTime VARCHAR(255) NOT NULL, eventEndTime VARCHAR(255) ,eventDuration VARCHAR(255),eventType INTEGER NOT NULL,eventCreatedDateTime VARCHAR(200) NOT NULL,eventUpdatedDateTime VARCHAR(200) NOT NULL,eventFailureCount INTEGER NOT NULL,eventStatus INTEGER NOT NULL, FOREIGN KEY(sessionAppID) REFERENCES Session(sessionAppID)ON DELETE CASCADE)"

[删除会话记录时,仅会话记录正在删除eventLog记录未删除,任何人都可以提供帮助,这是什么问题。通过我使用sqlite3版本3.7.1的方式]

我通过以下方式在ios中以编程方式在.File中创建了一个.sqlite文件:通过在NSFileManager上启用编译指示外键* theFileManager = [NSFileManager defaultManager];如果([[theFileManager ...

ios sqlite cascade cascading-deletes
2个回答
7
投票

请参见http://www.sqlite.org/foreignkeys.html#fk_enable。请注意,您需要为每个连接启用外键。


0
投票

我在Xamarin.Forms中使用SQLiteAsyncConnection的单例实例,但是无论如何都必须调用“ PRAGMA foreign_keys = ON;” 在每个DeleteAsync方法调用之前

© www.soinside.com 2019 - 2024. All rights reserved.