![](/img/trans.png)
[英]Data binding build error, extraneous input '\r' expecting {COMMENT, SEA_WS, '<', PI}
[英]error: extraneous input '.' expecting {, in Android Room Query
在 Android Room 中使用以下查詢:
@Query(
"SELECT strftime ('%d-%m-%Y', datetime(DISTINCT timeStamp, 'unixepoch', 'localtime')) AS e.name " +
"FROM (SELECT batteryDetails.*, " +
"COUNT(logId) OVER" +
"(PARTITION BY batteryId) AS oldStatus " +
"from batteryDetails) batteryDetails " +
"LEFT JOIN eventTypes e ON e.eventType = batteryDetails.status " +
"WHERE oldStatus is null OR oldStatus <> status AND batteryId = :batteryId AND " +
"timeStamp between :startDate AND :endDate " +
"ORDER BY timeStamp DESC"
)
suspend fun getHistoryEventsData(
batteryId: String,
startDate: String,
endDate: String
): List<String>?
getHistoryEventsData是 function
此查詢在 SQLite 數據庫瀏覽器中成功運行。
但它在運行應用程序時給了我以下錯誤:
錯誤:無關的輸入“。” 期待 {, ';', K_ALTER, K_ANALYZE, K_ATTACH, K_BEGIN, K_COMMIT, K_CREATE, K_DELETE, K_DETACH, K_DROP, K_END, K_EXPLAIN, K_INSERT, K_PRAGMA, K_REINDEX, K_RELEASE, K_REPLACE, K_ROLLBACK, K_SAVEPOINT, K_SELECT, K_UPDATE, K_VACUUM , K_WITH, UNEXPECTED_CHAR} public abstract java.lang.Object getHistoryEventsData(@org.jetbrains.annotations.NotNull() ^ extraneous input '(' expecting {, ';', K_ALTER, K_ANALYZE, K_ATTACH, K_BEGIN, K_COMMIT, K_CREATE, K_DELETE , K_DETACH, K_DROP, K_END, K_EXPLAIN, K_INSERT, K_PRAGMA, K_REINDEX, K_RELEASE, K_REPLACE, K_ROLLBACK, K_SAVEPOINT, K_SELECT, K_UPDATE, K_VACUUM, K_VALUES, K_WITH, UNEXPECTED_CHAR}
可能是什么問題?
我的 SQLite 版本是 3.28.0 並使用 roomRuntime=3.2.0
您的查詢中有 2 個語法錯誤。
第一個是在 function strftime()
中使用關鍵字DISTINCT
(這實際上是 SQLite 允許的,但行為不應該像它應該的那樣)。 也許您在 function 之前想要它。
第二個是您使用別名e
在其定義中限定列別名的name
。 別名的定義不應被限定。
改成這樣:
SELECT DISTINCT strftime('%d-%m-%Y', datetime(timeStamp, 'unixepoch', 'localtime')) AS name
FROM (
SELECT batteryDetails.*,
COUNT(logId) OVER(PARTITION BY batteryId) AS oldStatus
from batteryDetails
) batteryDetails
LEFT JOIN eventTypes e ON e.eventType = batteryDetails.status
WHERE oldStatus is null OR oldStatus <> status
AND batteryId = :batteryId
AND timeStamp between :startDate AND :endDate
ORDER BY timeStamp DESC;
另外,這個:
strftime('%d-%m-%Y', datetime(timeStamp, 'unixepoch', 'localtime'))
可以簡化為:
strftime('%d-%m-%Y', timeStamp, 'unixepoch', 'localtime')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.