Может ли время выполнения Exception (столбец list_id не существует) происходят из левого присоединиться?

голоса
0

В моем проекте Android студии я реализовал базу данных (управляемый номер). В моем файле Dao, у меня есть следующий запрос, который вызывает ошибку:

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;

Говорит ошибка java.lang.IllegalArgumentException: column '`list_id`' does not exist. Ошибка указывает на файл, который был автоматически созданный номер.

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

Чтобы быть более конкретным, точки ошибок в линии:

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

Теперь мой вопрос, может ли это результат ошибки слева присоединиться? Действительно странно то, что код работает на некоторых устройствах и на других нет. Был бы очень рад, если кто - то есть идея.

Задан 02/12/2019 в 23:55
источник пользователем
На других языках...                            


1 ответов

голоса
0

Таким образом, после отладки пару часов я нашел ошибку и решение.

происхождение ошибки

Ложь об ошибках в инерционности библиотеке номер. При использовании этой библиотеки на устройствах с API ниже 27 (по крайней мере , это то , что я думаю, так как я тестировал 3 -х устройства с различным APIs), то исключение брошено Если вы используете префикс в вашем SELECTзаявлении. Под «таблицей приставки» Я имею в виду, например, tab1.по прибытию tab1.list_id.

Решение:

Просто используйте псевдоним для столбца, который имеет префикс таблицы. Вместо того

SELECT tab1.list_id, ... FROM

записывать

SELECT tab1.list_id AS list_id, ... FROM

Ответил 03/12/2019 в 01:38
источник пользователем

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