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?
在准备另一个Statement之前是不是需要关闭PreparedStatement
我们是不是需要在选择调用时关闭 EntityManager 资源