android
  • sqlite
  • union
  • 2011-02-12 2 views 0 likes 
    0

    이 SQLite 쿼리가 있습니다 :android sqlite union, 테이블에서 결과를 검색하는 방법?

    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 관리자에서 작동합니다. 내 문제는 데이터를 가져 오는 중에 오류가 발생한다는 것입니다. 다음은 내 코드 스 니펫입니다.

    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에서이 동일한 명령문을 실행 해 보았지만 아무런 결과가 없었습니다.

    답변

    0

    는 오류가 쿼리에 보인다는 사실을이 닫지 않는 커서가 그는 내가 정확하게 쿼리를 계산하지 않기 때문에

    당신이 그것을 여러 번 사용하고 아마이 도움이 컴파일러

    희망 혼란, 당신은 속성 TASKID를 사용할 때 별칭을 사용하려고!

    +0

    고맙습니다. 나는 오늘 그것을 시도 할 것이다. :) – kreigh

    +0

    그것이 작동하는지 알려주세요! :디 – scambione

    관련 문제