5

不确定我是否应该以及如何关闭 SQLite.swift 中的连接。它会导致线程/内存泄漏吗?

4

3 回答 3

1

通常,当Connection变量超出其使用范围并由垃圾收集系统(在deinit函数中)回收时,数据库将关闭。但有时它是您的类的属性之一,因此您可能希望在某些函数的中间手动关闭它。因此,此代码有效:

sqlite3_close(db.handle)

wheredb的类型为Connection. 然后您可以覆盖数据库文件或删除它,不会引发任何警告。无论如何,我强烈建议您以谨慎的方式设计代码,让系统释放句柄。

于 2021-06-23T21:03:10.580 回答
0

如果您不手动操作,Sqlite 连接将自动关闭。

例如:

    try { 
        conn.close();
    } 
    catch (Exception ex) {
        System.out.println ("Error");
        return false;
    }
于 2015-11-27T06:57:29.967 回答
0
  • 尽管 SQLite 会自动关闭连接。避免来自悬空线程的潜在竞争条件。为了完整起见,我将其添加到通用 Swift 查询函数的末尾。
if sqlite3_close(db) != SQLITE_OK {
    print("error closing database")
}

在哪里

var db: OpaquePointer?
var databaseFullPath: String = "" /// Location database.

if sqlite3_open(databaseFullPath, &db) != SQLITE_OK {
    print("error opening database")
}

附加信息: sqlite3_close() 文档

于 2020-04-30T03:43:28.193 回答