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上,必须在有效路径下创建应用程序文件。有效路径包括应用程序的“文档”文件夹中的路径。例如:
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章节以获取更多信息。
关于swift - swift 4 |引用数据库文件以进行SQLite查询“无法打开数据库文件”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46775998/