You should close SQLiteDatabase objects in Android developing (2)

“SQLiteOpenHelper” may return the same “SQLiteDatabase” object. Based on this, I will describe how to execute close() properly.

“SQLiteOpenHelper” returns the same “SQLiteDatabase” object

Before, in my article You should close SQLiteDatabase in Android developing (1) | DeVlog, I said you should close “SQLiteDatabase” object properly.

Then, I found that the objects obtained from “SQLiteOpenHelper” may be the same “SQLiteDatabase” object. That is, “SQLiteOpenHelper” object holds mDatabase field which is the “SQLiteDatabase” object and returns it.

You can be addressed with the same idea

However, the way of action is almost same to [Pattern 1] – [pattern 3] of the previous article. You shoud close properly.

[Pattern 1]
Get one “SQLiteDatabase” object from one “SQLiteOpenHelper” object when you need it, and close it when you no longer need it. I take this style basically.

This is as a previous article.

By the way, even if you close a “SQLiteDatabase” object that is obtained from a SQLiteHelper object and then you get a “SQLiteDatabase” object from the same Helper opbject, there is no problem. In that case, new “SQLiteDatabase” object will be created.

[Pattern 2]
If you retrieve multiple objects from a single “SQLiteOpenHelper” in one thread, you should call close() at once when no longer needed. To do so, use “SQLiteOpenHelper#close()”. It will close the “SQLiteDatabase” object inside.

[Pattern 3]
If you want to use “SQLiteDatabase” object obtained from a “SQLiteOpenHelper” object in multi threads, you should use the “aquireReference()”.

db1 and db2 in [Pattern2] or mDb1 and mDb2 in [Pattern3] looks different each other, but are the same entity. Therefore, their handling is the same as when dealing with multiple references in the previous article.

[Reference Sites]

  1. SQLiteOpenHelper | Android Developers
  2. SQLiteDatabase | Android Developers

[Relative Article]
You should close SQLiteDatabase in Android developing (1) | DeVlog

Your email address will not be published.