Вы должны всегда закрывать Курсор, когда закончите с ним, Курсор также требует, чтобы База данных была открыта.
Вам вообще не нужно закрывать базу данных.
dbHelper.close закрывает базу данных.
Когда вы вызываете getWritableDatabase или getReabableDatabase (это обычно получает базу данных с возможностью записи в любом случае), она открывает базу данных и кэширует ее, поэтому, как правило, одно и то же открытие используется, пока вы не закроете Это.
Открытие базы данных может быть довольно интенсивным, поэтому вы должны минимизировать количество закрытий, чтобы вам не приходилось открывать их снова.
Cusrors, каждый из которых имеет базовый файловый слот. Файловые слоты ограничены, используйте их все, и приложение упадет.
Итак
public int getLocalSavedPartsAmount() {
int partsAmount;
PartsAppDbHelper dbHelper = new PartsAppDbHelper(context);
SQLiteDatabase db = dbHelper.getReadableDatabase();
String[] columns = {...};
Cursor cursor = db.(...);
partsAmount = cursor.getCount();
//which one do I have to close here?
cursor.close(); //1
return partsAmount ;
}
Было бы достаточно.