You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 9/10设备使用CASE WHEN TRUE触发SQLiteException求助

SQLite布尔值兼容性问题解答

问题原因

确实和设备搭载的SQLite版本直接相关:

  • Android 13内置的SQLite版本较高(通常为3.38及以上),支持将TRUE/FALSE作为布尔常量解析;
  • Android 9、10内置的SQLite版本较低(Android 9对应SQLite 3.22,Android 10对应SQLite 3.28),这些版本没有内置TRUE/FALSE常量,SQLite会将其识别为列名,从而抛出no such column: TRUE的错误。

向后兼容的写法

有两种可靠的兼容方案:

方案1:用整数1/0替代布尔常量

SQLite中布尔类型本质是整数存储,1代表真,0代表假,直接替换即可:

SELECT *
FROM portfolio
JOIN holdingCalculations
ON portfolio.uid = holdingCalculations.uid
ORDER BY calc_num_transactions = 0, CASE use_local_currency_for_totals WHEN 1 THEN calc_total_change_percent_local ELSE calc_total_change_percent END DESC, portfolio.name COLLATE NOCASE

方案2:简化CASE条件判断

直接将布尔列作为CASE的判断条件,无需显式对比TRUE:

SELECT *
FROM portfolio
JOIN holdingCalculations
ON portfolio.uid = holdingCalculations.uid
ORDER BY calc_num_transactions = 0, CASE WHEN use_local_currency_for_totals THEN calc_total_change_percent_local ELSE calc_total_change_percent END DESC, portfolio.name COLLATE NOCASE

内容的提问来源于stack exchange,提问作者mliu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 02:37:27