gpt4 book ai didi

ios - Swift3 sqlite3_open() 打开现有文件

转载 作者:可可西里 更新时间:2023-11-01 00:36:12 33 4
gpt4 key购买 nike

let file_url = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor:nil,create: false).appendingPathComponent("asd.db")
var db:OpaquePointer? = nil
if sqlite3_open(file_url.path, &db) == SQLITE_OK
{
print("Successfully opened connection database!!")
var q:OpaquePointer? = nil
if sqlite3_prepare_v2(db, "SELECT * FROM aaa", -1, &q, nil) == SQLITE_OK
{
if sqlite3_step(q) == SQLITE_ROW
{
let res = sqlite3_column_text(q, 1)
let name = String(cString: res!) }
else
{
print("ERROR1!!!!!")
}
}
else
{
print("ERROR!2!!!!")
}
}

我在项目中有一个名为“asd.db”的数据库文件,我正在尝试打开并从数据库中读取数据。

我不知道为什么但是 sqlite3_open 找不到我的数据库文件,所以它创建了一个没有我的表的新文件。

我该如何解决?

最佳答案

  1. 如果您不希望 SQLite 创建新数据库,请使用 sqlite3_open_v2(使用 SQLITE_OPEN_READWRITE,但不使用 SQLITE_OPEN_CREATE 选项) 而不是 sqlite3_open

  2. 如果您运行过该应用程序并且文档文件夹中有一个空白数据库,请删除该应用程序并重新安装以摆脱该空白数据库。

  3. 如果您“在您的项目中”包含了一个数据库(并假设您已将它添加到相关目标),那么这意味着该数据库将在您的包中找到。

    标准流程是编写一个例程来查看数据库是否存在于文档文件夹中,如果不存在,则将其从包中复制到文档文件夹中,然后再尝试从文档文件夹中打开它。

    或者,也可以尝试在文档文件夹中打开它,如果因为找不到文件而失败,请将它从包中复制到文档文件夹中,然后重试。例如:

    var db:OpaquePointer? = nil

    /// Open database
    ///
    /// - returns: Return `true` if successful; return `false` on error.

    func openDatabase() -> Bool {
    do {
    let manager = FileManager.default

    let documentsURL = try manager.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).appendingPathComponent("asd.db")

    var rc = sqlite3_open_v2(documentsURL.path, &db, SQLITE_OPEN_READWRITE, nil)
    if rc == SQLITE_CANTOPEN {
    let bundleURL = Bundle.main.url(forResource: "asd", withExtension: "db")!
    try manager.copyItem(at: bundleURL, to: documentsURL)
    rc = sqlite3_open_v2(documentsURL.path, &db, SQLITE_OPEN_READWRITE, nil)
    }

    if rc != SQLITE_OK {
    print("Error: \(rc)")
    return false
    }

    return true
    } catch {
    print(error)
    return false
    }
    }

关于ios - Swift3 sqlite3_open() 打开现有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39870041/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com