在我的select查询中,我使用string.format作为where子句。 当我在格式中有strfTime时,我会收到错误。
select = String.format(Locale.US, "SELECT %d AS %s, CAST(strftime('%s', START) AS integer) AS %s",
SORT_ID, SORT_ORDER_ID, SORT_ORDER_DATE);
// select =“SELECT”+ SORT_ID +“AS SORT_ORDER_ID,CAST(strftime('%s',START)AS整数)AS SORT_ORDER_DATE”;
没有string.format的注释行有效。但是当我添加string.format时,我得到 MissingFormatArgumentException:格式说明符'%s'
答案 0 :(得分:1)
您的格式字符串
"SELECT %d AS %s, CAST(strftime('%s', START) AS integer) AS %s"
%d
%s
%s
%s
<强>参数强>
SORT_ID
SORT_ORDER_ID
SORT_ORDER_DATE
<强>问题强>
您的格式需要四个参数。但是您只提供三个参数。纠正这个。
我认为缺少最后一个别名AS %s
的参数
其他-问题强>
CAST(strftime('%s', START)
这不是格式化的字符串。
试试这个。
String QUERY_INTEGER = "CAST(strftime('%s', START)";
select = String.format(Locale.US, "SELECT %d AS %s, %s AS integer) AS %s",
SORT_ID, SORT_ORDER_ID, QUERY_CAST, SORT_ORDER_DATE);
答案 1 :(得分:1)
format()
函数使用%
作为替换标记;它需要%s
调用中strftime()
的字符串。
但您不希望将其替换为format()
。
要让format()
输出单个%
字符,您必须通过在格式字符串中加倍来转义它:
String.format("... strftime('%%s', START) ...", ...);