Poderia a exceção de runtime (list_id coluna não existe) vem juntar-se à esquerda?

votos
0

No meu projeto Android Studio Eu ter implementado um banco de dados (gestão da sala). No meu arquivo Dao, eu tenho a seguinte consulta que faz com que um erro:

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;

Diz o erro java.lang.IllegalArgumentException: column '`list_id`' does not exist. O erro aponta para o arquivo, que foi criado automaticamente pelo quarto.

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

Para ser mais específico, os pontos de erros para a linha:

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

Agora a minha pergunta é, poderia esse resultado de erro da esquerda participar? A coisa realmente estranha é que o código funciona em alguns dispositivos e em outro não. Seria realmente feliz, se alguém tem uma idéia.

Publicado 02/12/2019 em 23:55
fonte usuário
Em outras línguas...                            


1 respostas

votos
0

Assim, após a depuração de um par de horas eu encontrei o erro e uma solução.

origem de erro

As mentiras de erro na biblioteca de persistência quarto. Ao usar esta biblioteca em dispositivos com API menor do que 27 (pelo menos é isso que eu acho, desde que eu testei 3 dispositivos com diferentes APIs), em seguida, uma exceção é jogado SE você usar um prefixo de tabela em sua SELECTdeclaração. Por "prefixo da tabela" Quero dizer, por exemplo, o tab1.em tab1.list_id.

A solução:

Basta usar um alias para a coluna que tem um prefixo da tabela. Ao invés de

SELECT tab1.list_id, ... FROM

escrever

SELECT tab1.list_id AS list_id, ... FROM

Respondeu 03/12/2019 em 01:38
fonte usuário

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