SQLiteStatements 是不是需要关闭?

Posted

技术标签:

【中文标题】SQLiteStatements 是不是需要关闭?【英文标题】:Do SQLiteStatements need to be closed?SQLiteStatements 是否需要关闭? 【发布时间】:2018-07-15 19:27:45 【问题描述】:

android的sqlite类中,有一个类叫SQLiteStatement,可以通过编译SqliteDatabase.compileStatement()的语句获得

它继承了 SQLiteClosable 的子类,就像 Cursor 对象有一个 close 方法。

我知道使用 Cursor 时我们需要小心关闭它们,但是语句呢?他们需要关闭吗?

【问题讨论】:

通过查看代码,close 是 acquireReference grepcode.com/file/repository.grepcode.com/java/ext/… 的计数器,实际上大多数调用都是为 SQLiteProgram 传递的(它间接扩展了它和 SQLiteCloseable),您可以检查它的作用。 【参考方案1】:

SQLiteStatement 是 sqlite3_stmt object 的 Java 表示。只要它还活着,它不仅会占用 Java 堆中的内存,还会占用 SQLite 内部数据结构中的内存。此外,活动语句将阻止连接 (SQLiteDatabase) 关闭。 (我们可以假设这个包的作者不是为了好玩而从SQLiteClosable 派生的……)

【讨论】:

以上是关于SQLiteStatements 是不是需要关闭?的主要内容,如果未能解决你的问题,请参考以下文章

我是不是需要同时关闭() FileReader 和 BufferedReader?

Android SQLite调试

在准备另一个Statement之前是不是需要关闭PreparedStatement

我们是不是需要在选择调用时关闭 EntityManager 资源

在关闭 QFile 之前是不是需要刷新 QTextStream?

在我的情况下是不是需要互斥锁[关闭]