Kan de Runtime Exception (kolom list_ID bestaat niet) afkomstig zijn van links meedoen?

stemmen
0

In mijn Android Studio project heb ik een database (beheerd door Room) geïmplementeerd. In mijn Dao-bestand, heb ik de volgende vraag die een fout veroorzaakt:

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;

De fout zegt java.lang.IllegalArgumentException: column '`list_id`' does not exist. De fout wijst naar het bestand, dat automatisch is gemaakt door Room.

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

Om meer specifiek, de fout punten aan de lijn:

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

Nu is mijn vraag is, kan deze fout het gevolg zijn van de linker meedoen? De echt rare is, dat de code werkt op sommige apparaten en op andere niet. Zou echt blij zijn, als iemand een idee.

De vraag is gesteld op 02/12/2019 om 23:55
bron van user
In andere talen...                            


1 antwoorden

stemmen
0

Dus, na het debuggen van een paar uur vond ik de fout en een oplossing.

fout oorsprong

De fout zit hem in de kamer persistentie bibliotheek. Bij het gebruik van deze bibliotheek op apparaten met API lager dan 27 (tenminste dit is wat ik denk, omdat ik 3 apparaten met verschillende API's getest), dan is een uitzondering wordt gegooid IF u een tabel prefix gebruiken in uw SELECTverklaring. Met "tabelvoorvoegsel" bedoel ik bijvoorbeeld de tab1.in tab1.list_id.

De oplossing:

Gewoon gebruik maken van een alias voor de kolom met een tafel prefix heeft. In plaats van

SELECT tab1.list_id, ... FROM

schrijven

SELECT tab1.list_id AS list_id, ... FROM

antwoordde op 03/12/2019 om 01:38
bron van user

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