sqlite查询中的字符串格式
String format in sqlite query
在我的 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 integer) AS SORT_ORDER_DATE";
没有 string.format 的注释行有效。但是当我添加 string.format 时,我得到 MissingFormatArgumentException: Format specifier '%s'
你的格式字符串
"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);
format()
函数使用%
作为替换标记;它在 strftime()
.
的调用中需要 %s
的字符串
但是您不希望它被替换为 format()
。
要让 format()
输出单个 %
字符,您必须通过在格式字符串中加倍来转义它:
String.format("... strftime('%%s', START) ...", ...);
在我的 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 integer) AS SORT_ORDER_DATE";
没有 string.format 的注释行有效。但是当我添加 string.format 时,我得到 MissingFormatArgumentException: Format specifier '%s'
你的格式字符串
"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);
format()
函数使用%
作为替换标记;它在 strftime()
.
%s
的字符串
但是您不希望它被替换为 format()
。
要让 format()
输出单个 %
字符,您必须通过在格式字符串中加倍来转义它:
String.format("... strftime('%%s', START) ...", ...);