Kunne Runtime Exception (kolonne list_id finnes ikke) kommer fra venstre bli med?

stemmer
0

I min Android Studio-prosjektet har jeg gjennomført en database (administrert av rommet). I min Dao-fil, har jeg følgende spørring som forårsaker en feil:

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;

Feilen sier java.lang.IllegalArgumentException: column '`list_id`' does not exist. Feilen peker til filen som ble opprettet automatisk av rommet.

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

For å være mer spesifikk, feil peker på linjen:

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

Nå er spørsmålet mitt er, kan denne feilen resultat fra venstre bli med? Den virkelig rare er, at koden fungererenkelte enheter og på andre ikke. Ville være veldig glad, hvis noen har en idé.

Publisert på 02/12/2019 klokken 23:55
kilden bruker
På andre språk...                            


1 svar

stemmer
0

Så, etter feilretting et par timer jeg fant feilen og en løsning.

feil opprinnelse

Feil ligger i rommet utholdenhet bibliotek. Når du bruker dette biblioteket på enheter med API lavere enn 27 (i alle fall dette er hva jeg tror, siden jeg testet 3 enheter med ulike API), deretter et unntak blir kastet hvis du bruker en tabell prefix i SELECTuttalelsen. Med "table prefix" Jeg mener for eksempel tab1.i tab1.list_id.

Løsningen:

Bare bruke et alias for den kolonne som har et bord prefiks. I stedet for

SELECT tab1.list_id, ... FROM

skrive

SELECT tab1.list_id AS list_id, ... FROM

Svarte 03/12/2019 kl. 01:38
kilden bruker

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