2017-06-23 54 views
-3

在我的select查询中,我使用string.format作为where子句。 当我有格式的strfTime我得到错误。sqlite查询中的字符串格式

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” + SORT_ID + “AS SORT_ORDER_ID,CAST(的strftime( '%s' 的,START)AS整数)AS SORT_ORDER_DATE”;

没有string.format的注释行有效。但是,当我添加的String.Format我得到MissingFormatArgumentException:格式说明 '%s' 的

+1

您确定要一个datestring转换为整数?????以及为什么要转换列名称?他们都是字符串。顺便说一下,您将第一列重命名为另一个名称......为什么?我觉得你对数据库不太熟悉...... –

+1

你有1'%d'和3'%s'这需要4个参数。尽管你只有3. – Enzokie

+0

我不重命名第一列,它实际上是一个常量整数,并将其添加到游标结果中,以便以后用于排序。同样是转换日期的原因。 @rotwang – png

回答

1

format()函数使用作为%替代标记;它预计的字符串在strftime()的调用中。

但是,您不希望将其替换为format()。 要获得format()输出单个字符%,你必须通过它在格式字符串加倍逃脱它:

String.format("... strftime('%%s', START) ...", ...); 
+0

这节省了我的一天,非常感谢大家不要忽视上面的所有评论 – png

+0

@preetha如果你看过我的评论,它已经保存了5h多 – Fusselchen

1

你的格式字符串

"SELECT %d AS %s, CAST(strftime('%s', START) AS integer) AS %s"

  1. %d
  2. %s
  3. %s
  4. %s

参数

  1. SORT_ID
  2. SORT_ORDER_ID
  3. 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); 
+0

CAST(strftime('%s',START)在这里,这个START是%s的arg,但我确定这不是我必须使用它的方式,所以我想知道如何将strftime结合到字符串中。格式 – png

+1

在字符串格式中转义你的'%s'parameter,你必须使用'%% s'所以'“SELECT%d AS%s,CAST(strftime('%% s',START)AS integer)AS% “ – Fusselchen

+0

@preetha我编辑了我的答案 –