我看了其他答案,但是还没有任何答案可以解决我遇到的问题。我更感兴趣的是,我的工作方式是如何运作,如果可以的话,怎么做;比这里是替代方法。该项目适用于使用目标c的移动设备。

首先,我创建常规表,然后创建FTS表,如下所示。

NSString *searchTable = [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS %@ (%@ INTEGER PRIMARY KEY, %@ TEXT, %@ TEXT, %@ TEXT)", gPsalmVersesTableName, gIDKey , gNameKey, gVerseKey, gTextKey];
if (sqlite3_exec(mInfoDB, [searchTable UTF8String], NULL, NULL, &errMsg) != SQLITE_OK)
    NSLog(@"Failed to create table %@", gPsalmVersesTableName);

NSString *virtualTable = [NSString stringWithFormat:@"CREATE VIRTUAL TABLE IF NOT EXISTS %@ USING fts4 (content='%@', %@)",gFTSPsalmVersesTableName, gPsalmVersesTableName, gTextKey];
if (sqlite3_exec(mInfoDB, [virtualTable UTF8String], NULL, NULL, &errMsg) != SQLITE_OK)
    NSLog(@"Failed to create table %@", gFTSPsalmVersesTableName);


然后,我填充常规表(gPsalmVersesTableName),并确认此步骤可以正常工作。通过下载应用程序内容并在数据库查看器中读取表。

当我填充FTS表时,没有任何错误,但是没有数据添加到表中。

if (sqlite3_open([mDataBaseName UTF8String], &mInfoDB) == SQLITE_OK)
    {
        sqlite3_stmt *statement;
        @try
        {
            NSString *rebuildSQL = [NSString stringWithFormat:@"INSERT INTO %@(%@) VALUES('rebuild')", gFTSPsalmVersesTableName, gFTSPsalmVersesTableName];

            int result = sqlite3_prepare_v2(mInfoDB, [rebuildSQL UTF8String], -1, &statement, NULL);
            NSLog(@"%s", sqlite3_errstr(result));
        }
        @finally
        {
            sqlite3_finalize(statement);
            sqlite3_close(mInfoDB);
        }
    }


我已经在Android上实现了相同的代码,并且效果很好。任何帮助,将不胜感激。

最佳答案

sqlite3_prepare_v2()不执行语句; sqlite3_step()可以。

关于ios - 无法在iOS上填充SQLite FTS表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41098730/

10-10 21:34