Swift 4 |引用数据库文件SQLite的查询“无法打开数据库文件”

To begin, here is an image of my current project file set-upSwift 4 |引用数据库文件SQLite的查询“无法打开数据库文件”

我正在使用本项目中的以下:

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类数据,这可能会降低可用类型信息的质量BLE“。

我已经尝试更改“data.db”以simlpy“data”,但这不起作用。

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

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

谢谢。

Roy Gunderson

什么是mysql标签? –

删除mysql标签 –

回答

由于您未指定数据库的有效路径,因此会出现“无法打开数据库文件”错误。

在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章节。

Thankyou的答案,我正在实施的SQLite文件是pre,加载数据,从上面的截图中,是否存储data.db的正确位置?因为使用提供的代码它找不到任何数据库内容 –

编辑:问题解决了,必须将Data.db添加为目标 –

好。我建议你看看这个FAQ:[如何打开一个数据库作为我的应用程序的资源存储?](https://github.com/groue/GRDB.swift/blob/master/README.md#how -DO-I-开一个数据库存储作为一种资源 - 的 - 我的应用程序)。 –

Swift 4 |引用数据库文件SQLite的查询“无法打开数据库文件”