Android SQLite替代SQL查询执行遇语法错误,寻求解决方法
问题解决:Android SQLite语法错误及查询修正
错误分析
从报错信息和你的SQL代码来看,存在以下几个关键问题:
语法缺失:逻辑运算符遗漏
最后一个OR条件中,endDate='0'后直接跟括号,缺少AND连接后续条件,导致SQL解析失败。日期值未加引号
替换后的日期2022-11-29未用单引号包裹,SQL会将其解析为数值减法运算(2022-11-29=1982),既不符合日期格式,也会导致类型不匹配。数值与字符串错误比较
takenDate和endDate是LONG类型,你用了字符串'0'进行比较,应该直接使用数字0。原查询逻辑遗漏
未保留原SQL中OR @SelecctedDate IS NULL的条件,导致当日期变量为空时无法匹配数据。字段替换偏差
原SQL最后一个条件使用createdTime,但你的Android查询中换成了lastUpdateDate,若为笔误需修正回createdTime。
修正后的Android SQLite查询
SELECT * FROM $table WHERE ( (($selectedDate >= strftime('%Y-%m-%d', takenDate/1000, 'unixepoch') AND takenDate != 0) AND ($selectedDate <= strftime('%Y-%m-%d', endDate/1000, 'unixepoch') AND endDate != 0)) OR (($selectedDate = strftime('%Y-%m-%d', takenDate/1000, 'unixepoch') AND takenDate != 0) AND endDate = 0) OR (takenDate = 0 AND ($selectedDate = strftime('%Y-%m-%d', endDate/1000, 'unixepoch') AND endDate != 0)) OR (takenDate = 0 AND endDate = 0 AND ($selectedDate = strftime('%Y-%m-%d', createdTime/1000, 'unixepoch'))) OR $selectedDate IS NULL )
额外注意事项
- 确保
$selectedDate替换后是带单引号的日期字符串,比如'2022-11-30',而不是裸数值。 - 若
createdTime确实需要替换为lastUpdateDate,可根据业务需求调整,但需保证字段类型是可转换为时间戳的数值。
内容的提问来源于stack exchange,提问作者Rabindra Acharya
相关产品推荐
相关产品推荐

