Указание второго курсора на ту же базу данных в sqlite на андроиде, это нет нет? - PullRequest
0 голосов
/ 15 июля 2011

У меня есть эта функция, которая заполняет класс на основе данных из нескольких таблиц.Я получил первый курсор:

String query="SELECT * FROM SESSION where _id =" + mSessionID + ";";
Cursor c = dbAdapter.selectRecordsFromDB(query, null);
Session session=null;
c.moveToFirst();            

Это прекрасно работает.Затем немного ниже я делаю это:

long galleryId = c.getInt(4);               
long packageId = c.getInt(5);
long contractId = c.getInt(6);

String query2="SELECT * FROM PHOTOPACKAGES WHERE _id =" + packageId + ";";
Cursor p = dbAdapter.selectRecordsFromDB(query2, null);

и курсор p всегда возвращает -1 для своего количества.Я могу пойти прямо в sqlite в ADB и выполнить тот же запрос, где packageId = 1, и он отлично работает ... поэтому не уверен, почему это не работает, я не вижу других ошибок ... вы можете просто неиспользовать два курсора в одной базе данных?ps selectRecordsFromDB является вспомогательной функцией:

    public Cursor selectRecordsFromDB(String query, String[] selectionArgs) {

    Cursor c = myDataBase.rawQuery(query, selectionArgs);
    return myDataBase.rawQuery(query, selectionArgs);       
}

Ответы [ 2 ]

2 голосов
/ 15 июля 2011

Чтобы ответить на ваш актуальный вопрос: Да, вы можете использовать одну и ту же БД с несколькими курсорами. Я считаю, что с вашим кодом что-то не так. Кроме того, как отметил Филипп, создание курсоров очень дорого, и вы не хотите делать дополнительные только потому, что всегда закрываете их, когда заканчиваете с ними.

1 голос
/ 15 июля 2011

Ваша функция selectRecordsFromDB выглядит чертовски странно, но, вероятно, она будет работать по моде, потому что первый созданный вами курсор сразу теряет фокус.Утечка открытых курсоров, как это, не очень хорошая идея.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...