• After 15+ years, we've made a big change: Android Forums is now Early Bird Club. Learn more here.

Apps android sqlite union, how to retrive results from the tables?

I have this SQLite query:

Code:
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);

It's quite long really, but it works flawlessly on SQLite Manager. My problem is I get an error in retrieving the data. here is a snippet of my code:

Code:
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;

It returns this error. :( Please help me.

Code:
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

Any help would be greatly appreciated... :( So my questions are:
1. Which part of the code do I exactly need to close the connection/cursor?
2. Why does eclipse give me this error? I tried running this same statement in SQLite manager and it gave me flawless results. How exactly do I get the results from my query? Is this the right approach?

Code:
String annualTask = orgiCursor.getString(orgiCursor.getColumnIndex("specificOccassion"));

I am so desperate right now. Please help. T_T
 
"ambiguous column name: taskId" means there is more than one table you select from which has this column, and you must specify which table to use taskId from.

Its in the last part of the SQL: "(select taskId from Task,AnnualTask where Task.taskId = AnnualTask.taskId and Task.name = '"+profName+"' and AnnualTask.setDate<>'--')"

You must put either Task or AnnualTask in front of taskId
 
Back
Top Bottom