web-dev-qa-db-fra.com

Erreur de la chambre: pas d’alternative viable en entrée?

J'essaie de mettre à jour la table à l'aide de l'annotation @Query de la bibliothèque de la pièce. Voici mon code (interface Dao):

@Query("UPDATE table_name SET table_name.col1 = :val1 WHERE table_name.col2 = :val2")
void updateValue(long val1, long val2);

Terminez la chaîne d'erreur comme ci-dessous:

Error:(11, 10) error: no viable alternative at input 'UPDATE table_name SET table_name.'

Voici la classe d'entité:

@Entity(tableName = "table_name")
public class SampleTable {

    @PrimaryKey
    @ColumnInfo(name = "_id")
    private Long Id;

    @ColumnInfo(name = "col1")
    private Long column1;

    @ColumnInfo(name = "col2")
    private Long column2;

    public Long getId() {
        return Id;
    }

    public void setId(Long id) {
        Id = id;
    }

    public Long getColumn1() {
        return column1;
    }

    public void setColumn1(Long column1) {
        this.column1 = column1;
    }

    public Long getColumn2() {
        return column2;
    }

    public void setColumn2(Long column2) {
        this.column2 = column2;
    }
}

Qu'est ce qui ne va pas avec mon code ?

9
pcj

Essayez de changer votre déclaration en:

UPDATE table_name SET col1 = :val1 WHERE col2 = :val2.

Le message d'erreur donne l'impression que Room est déclenché par le préfixe.

Ceci est un bogue dans Room, au moins par le biais de 1.0.0-alpha8. Suivre ce problème pour voir quand il sera corrigé.

Ce n'est en fait pas une syntaxe SQLite valide, comme il se trouve . Les préfixes de table vont sur les colonnes dans les instructions SELECT, pas les instructions UPDATE

5
CommonsWare

Cette erreur peut également se produire dans ce cas:

Si vous passez une liste, n'oubliez pas d'ajouter les parenthèses entourant votre variable de liste, sinon vous obtiendrez la même erreur:

@Query("select name from mytable where name in (:myList)")
LiveData<List<String>> findNames(List<String> myList);
11
live-love

Dans mon cas, un message était error: no viable alternative at input 'is' (et un nom de requête a été mentionné). J'ai trouvé que la requête ne comportait pas d'espaces nécessaires entre des mots comme ici:

    "from car" +       // Add a space here.
    "where brand_id is null" +
0
CoolMind