Как объединить несколько таблиц с managedQuery? - PullRequest
2 голосов
/ 29 ноября 2010

Я пытаюсь сделать запрос, в котором я получаю данные из двух таблиц, но он не даст мне никакого результата.Я знаю, что есть результат, потому что в SQLite3 он отображает хотя бы один, например,

sqlite> select eventthemename, eventtypename from event_type, event_theme
   ...> where event_type.eventthemes = event_theme._id     
   ...> and event_type._id = '2';
Tribal | Dance

Я использую контент-провайдер.У кого-нибудь есть идеи как это сделать?

Ответы [ 2 ]

0 голосов
/ 10 декабря 2010

Поскольку я использую контент-провайдеров, я прекратил делать что-то не совсем быстро, но это работает:

themes = managedQuery(
        EventTheme.CONTENT_URI,
        PROJECTIONTHEMES,
        EventTheme.EVENTTYPE + "= ?",
        new String[] {eventType},
        EventTheme.DEFAULT_SORT_ORDER);

String[] from = new String[] { 
        Event._ID,
        Event.NAME,
        Event.STARTDATE,
        Event.ENDDATE,
        PointOfInterest.POINTOFINTERESTNAME
    };

int[] to = new int[] { 
        R.id.event_id,
        R.id.name,
        R.id.start_date,
        R.id.end_date,
        R.id.location_name
    };

while (themes.getPosition() < themes.getCount() - 1) {
    themes.moveToNext();
    eventTheme = themes.getString(themes.getColumnIndexOrThrow(EventTheme._ID));                
    events = managedQuery(
            Event.CONTENT_URI,
            PROJECTIONEVENTS,
            Event.EVENTTHEME + "= ?",
            new String [] { eventTheme } ,
            Event.DEFAULT_SORT_ORDER);
}
0 голосов
/ 29 ноября 2010

Ваш вопрос не совсем понятен (вы должны включить часть своего кода!), Поэтому я не могу ответить на ваш вопрос, как вы и надеялись.Ниже приведен простой пример, в котором я объединяю две таблицы в одном запросе:

private static final String QUERY_ALL_COURSES_WITH_SEMESTER =
 "SELECT * FROM Course JOIN Semester ON semesterId = courseSemesterId";

public Course getCourseByCodeAndSemester(String courseCode, Semester semester)
{
 Course result = null;
 String whereClause = " WHERE courseCode = '" + courseCode.toUpperCase() + "'"
   + " AND semesterId = " + semester.getInternalId();
 Cursor cursor = db.rawQuery(QUERY_ALL_COURSES_WITH_SEMESTER + whereClause, null);
 if (cursor.moveToFirst())
 {
  result = Course.createFromCursor(cursor);
 }
 cursor.close();
 return result;
}

Обратите внимание, что, вероятно, есть много вещей, которые можно оптимизировать с помощью этой функции, но она иллюстрирует, как это можно сделать.

...