【问题标题】:Can't access fts4 virtual table - SQLite DB Error: 1 "no such table:"无法访问 fts4 虚拟表 - SQLite DB 错误:1“没有这样的表:”
【发布时间】:2015-08-18 07:08:21
【问题描述】:

我对编程很陌生,如果这是一个愚蠢的问题,我很抱歉。 我想在 iOS 上制作一个字典应用程序,我想为此使用 fts4 表。我使用 SQLite 和 FMDB。 所以,我创建了一个虚拟表,但是当我尝试在其中找到任何东西时,我得到一个异常,它不存在。怎么了?我尝试在创建虚拟表后立即搜索,但没有编写两个不同的函数,但仍然出现异常。

代码如下:

let db : FMDatabase
let resourcePath = NSBundle.mainBundle().resourceURL!.absoluteString
let dbPath = resourcePath?.stringByAppendingPathComponent("dictionary.db")


db = FMDatabase(path: dbPath)
var res : FMResultSet?


if (createVirtualDB(db, "vdict") != nil) {}
else { println("Error while opening db")}

res = findInVirtualDB("test", db, "vdict")

我用这段代码创建虚拟表:

func createVirtualDB (db : FMDatabase, name : String) -> Int?
{
    if db.open()
    {
        let querySQL = "CREATE VIRTUAL TABLE \(name) USING fts4(content=\"DICT2\", level, latin, russian)"
        db.executeQuery(querySQL, withArgumentsInArray: nil)
    }
    else {return nil}

    return 1
}

搜索功能如下:

func findInVirtualDB(searchedString: String, db : FMDatabase, name : String) -> FMResultSet?
{
    let res : FMResultSet?
    if db.open()
    {
        let querySQL = "SELECT level, latin, russian FROM \(name) WHERE latin MATCH '\(searchedString)'"
        res = db.executeQuery(querySQL, withArgumentsInArray: nil)
    }
    else {return nil}
    return res
} 

【问题讨论】:

    标签: swift sqlite xcode6 fmdb


    【解决方案1】:

    我发现了问题。问题是 executeQuery() 函数仅适用于 SELECT 语句。对于 CREATE 语句,应使用 executeStatements() 函数。

    所以我把 createVirtualDB() 函数的代码从:

    let querySQL = "CREATE VIRTUAL TABLE \(name) USING fts4(content=\"DICT2\", level, latin, russian)"
    db.executeQuery(querySQL, withArgumentsInArray: nil)
    

    到这里:

    let querySQL = "CREATE VIRTUAL TABLE IF NOT EXISTS \(name) USING fts4(content=\"DICT2\", level, latin, russian)"
    db.executeStatements(querySQL)
    

    效果很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-29
      • 2016-11-18
      • 2015-05-11
      • 1970-01-01
      • 2019-03-13
      • 2012-04-08
      • 2016-02-01
      • 2012-06-13
      相关资源
      最近更新 更多