l'exception d'exécution peut (colonne list_id n'existe pas) viennent de rejoindre gauche?

voix
0

Dans mon projet Android Studio J'ai mis en place une base de données (géré par chambre). Dans mon dossier Dao, je la requête suivante qui provoque une erreur:

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;

L'erreur dit java.lang.IllegalArgumentException: column '`list_id`' does not exist. L'erreur pointe vers le fichier, créé automatiquement par chambre.

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

Pour être plus précis, les points d'erreur à la ligne:

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

Maintenant , ma question est, ce résultat pourrait d'erreur de la jointure gauche? La chose est vraiment bizarre, que le code fonctionne sur certains appareils et sur d' autres non. Ce serait vraiment heureux, si quelqu'un a une idée.

Créé 02/12/2019 à 23:55
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
0

Ainsi, après mise au point quelques heures j'ai trouvé l'erreur et une solution.

origine d'erreur

Les mensonges d'erreur dans la bibliothèque de persistance Chambre. Lorsque vous utilisez cette bibliothèque sur les appareils avec API inférieure à 27 (au moins ce que je suppose, puisque je l' ai testé 3 appareils avec des API différentes), une exception est jeté SI vous utilisez un préfixe de table dans votre SELECTdéclaration. Par « préfixe de table » Je veux dire par exemple tab1.dans tab1.list_id.

La solution:

Il suffit d'utiliser un alias pour la colonne qui a un préfixe de table. Au lieu de

SELECT tab1.list_id, ... FROM

écrire

SELECT tab1.list_id AS list_id, ... FROM

Créé 03/12/2019 à 01:38
source utilisateur

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