работа с DBHelper, SQLiteDatabase и курсором

В цикле читаю строки из файла (фамилии). В этом же цикле сравниваю полученную строку (фамилию) с данными из таблицы, если таких данных нет, то еще из одной таблицы получаю дополнительные справочные данные (адреса филиалов). Затем в цикле по этим справочным данным (адресам филиалов) записываю в таблицу tableDoctors, полученную фамилию из файла и адрес филиала. Данные записываются, но все подвисает и выбрасывает программу или на главный активити или вообще выходит из программы. Правильно ли я работаю с DBHelper, SQLiteDatabase и курсором?

  int departmen;
  ContentValues cv = new ContentValues();
  String sql111111 = "";
  String FioFromFile = "";
  DBHelper dbHelperFindDoctors = new DBHelper(this);
  Uri chosenUri = data.getData();
               try {
                    InputStream in = getContentResolver().openInputStream(chosenUri);
                    BufferedReader br = new BufferedReader(new InputStreamReader(in));
                    while ((FioFromFile = br.readLine().toLowerCase()) != null) {
                       ////////////////////////
                       ///////////////////////
                        Log.d(LOG_TAG,FioFromFile.toString());
                        SQLiteDatabase db111111=dbHelperFindDoctors.getWritableDatabase();
                        sql111111 = "select id from tableDoctors where fio=\"" + FioFromFile.toString() + "\"";
                        Cursor cursor111111 = db111111.rawQuery(sql111111, null);
                        if (cursor111111.getCount() <= 0) {
                            String sql222222 = "select  id from tableDoctorsAdress";
                            SQLiteDatabase db222222 = dbHelperFindDoctors.getWritableDatabase();
                            Cursor сursor222222 = db222222.rawQuery(sql222222, null);
                            if (сursor222222 != null) {
                                if (сursor222222.moveToFirst()) {
                                    do {
                                        for (String cn : сursor222222.getColumnNames()) {
                                            departmen = Integer.parseInt(сursor222222.getString(сursor222222.getColumnIndex(cn)));
                                            cv.put("fio", FioFromFile);
                                            cv.put("department", departmen);
                                            SQLiteDatabase db333333 = dbHelperFindDoctors.getWritableDatabase();
                                            long rowID = db333333.insert("tableDoctors", null, cv);
                                            db333333.close();
                                        }
                                    } while (сursor222222.moveToNext());
                                }
                                сursor222222.close();
                                db222222.close();
                            }
                        }
                        cursor111111.close();
                        db111111.close();
                        ////////////////////
                        /////////////////////
                    }
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                   e.printStackTrace();
                }

    dbHelperFindDoctors.close();

Ответы (1 шт):

Автор решения: user514533

все объявления переменных типа SQLiteDatabase db222222 = dbHelperFindDoctors.getWritableDatabase(); перенес в начало процедуры перед всеми циклами и условиями. А их закрытие db222222.close(); убрал в самый конец процедуры, после всех условий и циклов. Вроде как все заработало

→ Ссылка