我正在使用房间数据库,并在下面的查询中卡住了。
@Query("SELECT * FROM POI WHERE :columName IN (:fieldValue) ORDER BY ABS(Latitude - :latitude) + ABS(Longitude - :longitude) ASC LIMIT :limit")
List<PoiItems> getNearByLocation(String columName, List<String> fieldValue, double latitude, double longitude, int limit);
当我执行上面的查询时,它没有给我任何记录。我认为问题在于动态列名。因为当我传递静态列名时,它会给我记录。
那么有没有解决的办法呢?
任何帮助将不胜感激。
1条答案
按热度按时间bkhjykvo1#
当您将参数传递给
@Query
时,该值由SQLite接口绑定。SQLite不允许标识符的绑定值(例如表、列、视图名称)。因此,不是将列与值列表进行比较,而是将传递的列名的值作为文字值与值列表进行比较。有两种方法可以做到这一点
:-
@RawQuery
,其中在查询字符串中替换列名。这种方法的缺点是在编译时不检查结果SQL,因此更容易出现运行时错误。然而,就SQL而言,它通常是更简单的方法。