Android sqlite union, как получить результаты из таблиц? - PullRequest
0 голосов
/ 12 февраля 2011

У меня есть запрос SQLite:

Cursor orgiCursor = orgiDb.rawQuery("select task,taskDate from meeting where exists 
(select `meeting.taskId from Task, meeting where meeting.taskId = Task.taskId and task.name='"+profName+"')
UNION  SELECT subject,date from taskDeadline where exists (select taskDeadline.taskId from taskDeadline,Task where taskDeadline.taskId=Task.taskId and Task.name='"+profName+"') union select 
specificOccassion,setDate from AnnualTask where exists (select taskId from Task,AnnualTask where Task.taskId = AnnualTask.taskId and Task.name = '"+profName+"' and AnnualTask.setDate<>'--')", null);

Это довольно долго, но работает безупречно на SQLite Manager. Моя проблема в том, что я получаю ошибку при получении данных. Вот фрагмент моего кода:

try {
    if (orgiCursor != null ) {
        if (orgiCursor.moveToFirst()) {
            do {
                String annualTask = orgiCursor.getString(orgiCursor.getColumnIndex("specificOccassion"));
                String annualDate = orgiCursor.getString(orgiCursor.getColumnIndex("setDate"));
                String meetingTask = orgiCursor.getString(orgiCursor.getColumnIndex("task"));
                String meetingDate = orgiCursor.getString(orgiCursor.getColumnIndex("taskDate"));
                String deadlineTask = orgiCursor.getString(orgiCursor.getColumnIndex("subject"));
                String deadlineDate = orgiCursor.getString(orgiCursor.getColumnIndex("date"));

                SearchResults sr2=new SearchResults();
                sr2.setName(meetingTask);
                sr2.settDate(meetingDate);
                results.add(sr2);

                SearchResults sr3 = new SearchResults();
                sr3.setName(deadlineTask);
                sr3.settDate(deadlineDate);
                results.add(sr3);

                SearchResults sr1 = new SearchResults();
                sr1.setName(annualTask);
                sr1.settDate(annualDate);
                Log.i("Home","added"+annualTask + " & " +annualDate);
                results.add(sr1);
            } while (orgiCursor.moveToNext());
        }
    }
} catch (SQLiteException se) {
    displayError1(se.toString());
    Log.e(getClass().getSimpleName(), se.toString());
} finally {
    if (orgiDb != null) {
        orgiDb.close();
        Log.e(getClass().getSimpleName(),"orgiDB closed()");
    }
}


    return results;

Возвращает эту ошибку. :( Пожалуйста, помогите мне.

02-12 19:28:00.809: INFO/Database(14515): sqlite returned: error code = 1, msg = ambiguous column name: taskId
02-12 19:28:00.849: ERROR/AndroidRuntime(14515): Caused by: android.database.sqlite.SQLiteException: ambiguous column name: taskId: , while compiling: select task,taskDate from meeting where exists (select meeting.taskId from Task, meeting where meeting.taskId = Task.taskId and task.name='Maria Ozawa')UNION  SELECT subject,date from taskDeadline where exists (select taskDeadline.taskId from taskDeadline,Task where taskDeadline.taskId=Task.taskId and Task.name='Maria Ozawa') union select specificOccassion,setDate from AnnualTask where exists (select taskId from Task,AnnualTask where Task.taskId = AnnualTask.taskId and Task.name = 'Maria Ozawa' and AnnualTask.setDate<>'--')

02-12 19:28:01.059: ERROR/Database(14515): close() was never explicitly called on database '/data/data/orgy.organizer.home/databases/orgi' 
02-12 19:28:01.059: ERROR/Database(14515): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here

Любая помощь будет принята с благодарностью ... :( Итак, мои вопросы:
1. Какая часть кода мне нужна для закрытия соединения / курсора?
2. Почему Eclipse дает мне эту ошибку? Я попытался запустить этот же оператор в SQLite Manager, и он дал мне безупречные результаты.

1 Ответ

0 голосов
/ 12 февраля 2011

кажется, что ошибка в запросе, факт, что он не закрывает курсор, потому что он неправильно вычисляет запрос, я думаю

пытается использовать псевдоним, когда вы используете атрибутэто много раз и, возможно, это смущает компилятор

надеюсь, это помогло!

...