斯威夫特4 |引用SQLite查询的数据库文件“无法打开数据库文件”

时间:2017-10-16 17:36:51

标签: swift database sqlite

To begin, here is an image of my current project file set-up

我在这个项目中使用以下内容:

import UIKit
import SQLite
import GRDB

当我执行以下代码时:

        {
        tagString = x
        let dbQueue = try! DatabaseQueue(path: "data.db" )
        try! dbQueue.inDatabase { db in
            let rows = try Row.fetchCursor(db, "SELECT * FROM quotes WHERE genre = ? AND LENGTH(quote) < 100",
                                           arguments: [tagString])

我收到以下错误“无法打开数据库文件”以及警告“无法执行支持代码以在此过程中读取Objective-C类数据。这可能会降低可用类型信息的质量。”

我尝试将“data.db”更改为“数据”,但这不起作用。

我找到的唯一解决方案是从计算机上编写完整路径并在模拟应用程序上运行它。如果我尝试在手机上使用整个路径(例如/Users/myName/Desktop/AppName/data.db),程序崩溃(我假设因为手机上不存在该内存位置)

问题:我对数据库的调用是否正确?如果是这样,任何想法为什么它可能无法找到它?

三江源。

1 个答案:

答案 0 :(得分:0)

你得到&#34;无法打开数据库文件&#34;错误,因为您没有指定数据库的有效路径。

在iOS上,必须在有效路径处创建应用程序文件。有效路径包括应用程序的Documents文件夹中的路径。例如:

let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString
let dbPath = documentsPath.appendingPathComponent("data.db")
let dbQueue = try DatabaseQueue(path: dbPath)

有关详细信息,请参阅iOS文档的File System Basics章节。