Könnte die Runtime Exception (Spalte list_id nicht existiert) von LEFT JOIN kommen?

stimmen
0

In meinem Android-Studio-Projekt habe ich eine Datenbank (verwaltet von Zimmer) umgesetzt. In meiner Dao-Datei, ich habe die folgende Abfrage, die einen Fehler verursacht:

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;

Der Fehler sagt java.lang.IllegalArgumentException: column '`list_id`' does not exist. Der Fehler verweist auf die Datei, die von Raum automatisch erstellt wurde.

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

Genauer gesagt, die Fehlerpunkte auf der Linie zu sein:

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

Nun meine Frage ist, könnte dieser Fehler resultieren aus der linken anschließen? Das wirklich Seltsame ist, dass der Code funktioniert auf einigen Geräten und auf anderen nicht. Wäre wirklich froh, wenn jemand eine Idee hat.

Veröffentlicht am 02/12/2019 um 23:55
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
0

So, nach ein paar Stunden Debuggen fand ich den Fehler und eine Lösung.

Fehler Herkunft

Der Fehler liegt im Zimmer Persistenz - Bibliothek. Bei niedriger mit dieser Bibliothek auf Geräte mit API als 27 (zumindest das ist , was ich denke, da ich 3 Geräte mit unterschiedlichen APIs getestet), dann wird eine Ausnahme ausgelöst , WENN Sie eine Tabelle Präfix in Ihrem verwenden SELECTAnweisung. Mit „Tabellen - Präfix“ Ich zum Beispiel bedeuten , die tab1.in tab1.list_id.

Die Lösung:

Nur verwenden, um ein Alias ​​für die Spalte, die eine Tabelle Präfix aufweist. Anstatt

SELECT tab1.list_id, ... FROM

schreiben

SELECT tab1.list_id AS list_id, ... FROM

Beantwortet am 03/12/2019 um 01:38
quelle vom benutzer

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