Mohla by Runtime Výjimka (sloupec list_id neexistuje) pocházejí z levé připojit?

hlasů
0

V mém projektu Android Studia jsem implementoval databázi (spravovaný místnosti). V mém souboru Dao, mám následující dotaz, který způsobuje chybu:

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;

Říká, že došlo k chybě java.lang.IllegalArgumentException: column '`list_id`' does not exist. Tato chyba odkazuje na soubor, který byl automaticky vytvořen podle typu pokoje.

...
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);
          ...

Chcete-li být konkrétnější, chybové body na trati:

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

Teď moje otázka je, mohlo by to chyba výsledek zleva připojit? Opravdu divná věc je, že kód funguje v některých zařízeních a na jiné nikoliv. By bylo opravdu rád, pokud někdo má nápad.

Položena 02/12/2019 v 23:55
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
0

Takže poté, co ladění pár hodin jsem našel chybu a řešení.

Chyba původ

Leží chyba v knihovně Room vytrvalost. Při použití této knihovny na zařízeních s API nižší než 27 (alespoň to je to, co myslím, protože jsem testoval 3 zařízení s různými API), pak výjimka dostane vyvolána IF použít předponu tabulky ve svém SELECTprohlášení. Pod pojmem „stolní předponou“ Mám na mysli například tab1.in tab1.list_id.

Řešení:

Stačí použít alias pro sloupec, který má předponu tabulky. Namísto

SELECT tab1.list_id, ... FROM

napsat

SELECT tab1.list_id AS list_id, ... FROM

Odpovězeno 03/12/2019 v 01:38
zdroj uživatelem

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