因此,我已经完成了创建fts4表的步骤(我在获取空间方面遇到了问题,所以我在sqlite中创建了fts4表并将其导入到项目中)。
但是,每当我试图查询数据库时expected:... actual:...“错误。错误如下:
TableInfo{name='citiesFts', columns={city=Column{name='city', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, city_ascii=Column{name='city_ascii', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, rowid=Column{name='rowid', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1, defaultValue='null'}}, foreignKeys=[], indices=[]}
Found:
TableInfo{name='citiesFts', columns={city=Column{name='city', type='', affinity='1', notNull=false, primaryKeyPosition=0, defaultValue='null'}, city_ascii=Column{name='city_ascii', type='', affinity='1', notNull=false, primaryKeyPosition=0, defaultValue='null'}}, foreignKeys=[], indices=[]}
在“found”字段中,“rowid”字段没有显示,尽管我请求了它。
这是导致错误的查询(位于我的fts dao中):
@Transaction
@Query(
"SELECT city, city_ascii, rowid FROM citiesFts WHERE city MATCH :city;")
List<CityFTS4> searchByCityName(String city);
这正是在sqlite3命令行中运行时,可以正常工作并返回rowid列的查询。
这是我的cityfts课程:
@Fts4(contentEntity = City.class)
@Entity(tableName = "citiesFts")
public class CityFTS4 {
@PrimaryKey
@ColumnInfo(name = "rowid")
public int id;
@ColumnInfo(name = "city")
private final String cityName;
@ColumnInfo(name = "city_ascii")
private final String cityASCII;
public CityFTS4( int id, String cityName, String cityASCII){
this.cityName = cityName;
this.cityASCII = cityASCII;
}
public String getCityName() {
return cityName;
}
public String getCityASCII() {
return cityASCII;
}
最后,这是citiesfts表的模式:
CREATE VIRTUAL TABLE 'citiesFts' USING FTS4('id', 'city', 'state_name', 'state_id', content='cities')
/* citiesFts(id,city,state_name,state_id) */;
任何帮助都将不胜感激。
我可以在我的'cityfts4'类中省略rowid字段,因为android开发人员文档声明主键字段是可选的,但是每当我试图忽略它时,就会出现一个错误。
暂无答案!
目前还没有任何答案,快来回答吧!