Android: do I need to close Cursor objects?
android, sqlite
Solution
Yes, it's recommended to close the cursor when you are done using that cursor object so that cursor can do whatever house keeping work it wants to do upon closure.
Problem
In my database adapter class, I have many methods like this: ``` public long getContactId(final String phoneNumber) throws SQLException { final Cursor cur = mDb.rawQuery( "select contact_id from contactphones where number=? limit 1;", new String[] { phoneNumber }); return cur.moveToFirst() ? cur.getLong(0) : -1; } ``` I appreciate the brevity of a method like that. But I am not calling Cursor.close(), and I'm not sure if that is a problem or not. Would the Cursor be closed and its resources freed in the Cursor.finalize()? Otherwise I would have to do: ``` public long getContactId(final String phoneNumber) throws SQLException { final Cursor cur = mDb.rawQuery( "select contact_id from contactphones where number=? limit 1;", new String[] { phoneNumber }); final boolean retVal = cur.moveToFirst() ? cur.getLong(0) : -1; cur.close(); return retVal; } ```