Czyżby Wyjątek Runtime (kolumna list_id nie istnieje) pochodzą od lewej przyłączyć?

głosy
0

W moim projekcie Android Studio I wprowadziły bazę danych (zarządzanej przez pokój). W moim pliku Dao, mam następującą kwerendę, która powoduje błąd:

SELECT tab1.list_id, ... FROM  
            (SELECT list_id, ...  FROM list_table) AS tab1  
            LEFT JOIN  
            (SELECT list_id, ...  FROM list_table NATURAL JOIN product_table NATURAL JOIN list_product_table GROUP BY list_id) AS tab2  
            ON tab1.list_id = tab2.list_id  
            ORDER BY list_position ASC, tab1.list_id ASC;

Błąd mówi java.lang.IllegalArgumentException: column '`list_id`' does not exist. Błąd wskazuje na plik, który został automatycznie utworzony przez pokoju.

...
return __db.getInvalidationTracker().createLiveData(new String[]{list_table,product_table,list_product_table}, false, new Callable<List<ShoppingListDisplayValues>>() {
      @Override
      public List<ShoppingListDisplayValues> call() throws Exception {
        final Cursor _cursor = DBUtil.query(__db, _statement, false, null);
        try {
          final int _cursorIndexOfPosition = CursorUtil.getColumnIndexOrThrow(_cursor, list_position);
          final int _cursorIndexOfId = CursorUtil.getColumnIndexOrThrow(_cursor, list_id);
          ...

Aby być bardziej szczegółowe, punkty błąd w linii:

final int _cursorIndexOfId = CursorUtil.getColumnIndexOrThrow(_cursor, list_id);

Teraz moje pytanie jest, może to wynik błędu z lewej przyłączyć? Naprawdę dziwne jest to, że kod działa na niektórych urządzeniach i na innych nie. Byłby bardzo zadowolony, jeśli ktoś ma pomysł.

Utwórz 02/12/2019 o 23:55
źródło użytkownik
W innych językach...                            


1 odpowiedzi

głosy
0

Tak więc, po debugowanie kilka godzin znalazłem błąd i rozwiązania.

pochodzenie błąd

Kłamstwa o błędach w bibliotece utrwalania pokoju. Podczas korzystania z tej biblioteki na urządzeniach z API niższa niż 27 (przynajmniej to co ja przypuszczam, ponieważ testowałem 3 urządzeń o różnych API), po czym pobiera wyjątek IF użyć prefiks tabeli w swoim SELECToświadczeniu. Przez „tabeli przedrostek” Mam na myśli na przykład tab1.in tab1.list_id.

Rozwiązanie:

Wystarczy użyć aliasu dla kolumny, która ma prefiks tabeli. Zamiast

SELECT tab1.list_id, ... FROM

pisać

SELECT tab1.list_id AS list_id, ... FROM

Odpowiedział 03/12/2019 o 01:38
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more