swift 4 |正在引用数据库文件进行 SQLite 查询 "unable to open database file"

标签 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”更改为简单的“data”,但这不起作用。

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

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

谢谢。

最佳答案

您收到“无法打开数据库文件”错误,因为您没有指定数据库的有效路径。

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

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

请引用File System Basics iOS 文档章节以获取更多信息。

关于 swift 4 |正在引用数据库文件进行 SQLite 查询 "unable to open database file",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46775998/

相关文章:

iOS 9 Safe Area Top 约束 xib 和 storyboard 不同

ios - 来自 ios_google_places_autocomplete 的 Nib 有问题

java - SQL - 锁定或不锁定 : selecting next unused code

c# - 在使用 SQLite 之前有什么注意事项吗?

java - 无法连接到数据库(找不到合适的驱动程序)

sql - 在sqlite3中参数化 'limit'和 'order'

swift - RxSwift PublishSubject 类型 Optional<Any type> startWith nil

swift - “ fatal error :在展开可选值时意外发现nil”是什么意思?

mysql - 搜索包含多个值的字段

ruby-on-rails - 在 Rails 中更新/增加值时的数据完整性