web-dev-qa-db-ja.com

部屋のエラー:入力時に実行可能な代替手段はありませんか?

ルームライブラリの@Queryアノテーションを使用してテーブルを更新しようとしています。以下は私のコードです(Daoインターフェイス内):

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

以下のようにエラー文字列を完成させます。

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

これがエンティティクラスです:

@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;
    }
}

私のコードの何が問題になっていますか?

9
pcj

ステートメントを次のように変更してみてください。

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

エラーメッセージは、Roomがプレフィックスをトリップしているように感じさせます。

これは、少なくとも1.0.0-alpha8を介したRoomのバグです。追跡 この問題 いつ修正されるかを確認します。

これは実際には有効なSQLite構文ではありません 結局のところ 。テーブルプレフィックスは、SELECTステートメントの列に配置されます UPDATEステートメントではありません

5
CommonsWare

このエラーは、次の場合にも発生する可能性があります。

リストを渡す場合は、リスト変数を囲む括弧を追加することを忘れないでください。そうしないと、同じエラーが発生します。

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

私の場合、メッセージはerror: no viable alternative at input 'is'(そしてクエリ名が言及されました)。クエリには、次のような単語の間に必要なスペースがないことがわかりました。

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