0

我的应用程序包中有一个 .sqlite 文件。我似乎打开了文件,但我无法访问文件中的表。

let fileURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).appendingPathComponent("test.sqlite")

//opening the database
 if sqlite3_open(fileURL.path, &db) == SQLITE_OK {
   print("opening database")
    }
 let queryString = "SELECT * FROM Table1"

 var stmt:OpaquePointer?

//preparing the query
 if sqlite3_prepare(db, queryString, -1, &stmt, nil) != SQLITE_OK{
       let errmsg = String(cString: sqlite3_errmsg(db)!)
       print("error preparing insert: \(errmsg)")
       return
     }

这会给出以下错误消息:“准备插入时出错:没有这样的表:Table1”

如我所见,数据库已找到并打开,但无法访问。正如我从 Stackoverflow 的其他帖子中看到的那样,这应该可以

编辑:我现在看到,如果我将数据库名称从 test.sqlite 拼错为 ttestt.sqlite,我仍然会得到同样的错误。表示未找到数据库。这条线有什么问题?

 let fileURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).appendingPathComponent("test.sqlite")
4

1 回答 1

0

解决方案是将数据库从捆绑包复制到文档目录:

 let bundleURL = Bundle.main.url(forResource: "test", withExtension: "sqlite")!
                try manager.copyItem(at: bundleURL, to: documentsURL)
                rc = sqlite3_open_v2(documentsURL.path, &db, SQLITE_OPEN_READWRITE, nil)
于 2018-06-13T18:00:21.947 回答