работа с 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 шт):
все объявления переменных типа SQLiteDatabase db222222 = dbHelperFindDoctors.getWritableDatabase(); перенес в начало процедуры перед всеми циклами и условиями. А их закрытие db222222.close(); убрал в самый конец процедуры, после всех условий и циклов. Вроде как все заработало