Room error: no viable alternative at input?
Room error: no viable alternative at input?
我正在尝试使用房间库的@Query 注释更新 table,下面是我的代码(在 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.'
这是实体 class:
@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;
}
}
我的代码有什么问题?
尝试将您的语句更改为:
UPDATE table_name SET col1 = :val1 WHERE col2 = :val2.
错误消息让人觉得 Room 被前缀绊倒了。
这是 Room 中的一个错误,至少通过 1.0.0-alpha8
。跟踪 this issue 以查看何时修复。
这实际上不是有效的 SQLite 语法,as it turns out. Table prefixes go on columns in SELECT
statements, not UPDATE
statements。
在这种情况下也可能发生此错误:
如果您传递的是列表,请不要忘记添加括号将您的列表变量括起来,否则您将得到相同的错误:
@Query("select name from mytable where name in (:myList)")
LiveData<List<String>> findNames(List<String> myList);
在我的例子中,一条消息是 error: no viable alternative at input 'is'
(并且提到了一个查询名称)。我发现查询在单词之间没有必要的空格,如下所示:
"from car" + // Add a space here.
"where brand_id is null" +
我正在尝试使用房间库的@Query 注释更新 table,下面是我的代码(在 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.'
这是实体 class:
@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;
}
}
我的代码有什么问题?
尝试将您的语句更改为:
UPDATE table_name SET col1 = :val1 WHERE col2 = :val2.
错误消息让人觉得 Room 被前缀绊倒了。
这是 Room 中的一个错误,至少通过 1.0.0-alpha8
。跟踪 this issue 以查看何时修复。
这实际上不是有效的 SQLite 语法,as it turns out. Table prefixes go on columns in SELECT
statements, not UPDATE
statements。
在这种情况下也可能发生此错误:
如果您传递的是列表,请不要忘记添加括号将您的列表变量括起来,否则您将得到相同的错误:
@Query("select name from mytable where name in (:myList)")
LiveData<List<String>> findNames(List<String> myList);
在我的例子中,一条消息是 error: no viable alternative at input 'is'
(并且提到了一个查询名称)。我发现查询在单词之间没有必要的空格,如下所示:
"from car" + // Add a space here.
"where brand_id is null" +