Формат строки в запросе sqlite

В моем запросе выбора я использую 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"

2 ответа

Решение

format() функция использует % в качестве сменных маркеров; он ожидает строку для %s в призыве к strftime(),

Но вы не хотите, чтобы это было заменено format(), Получить format() вывести один % символ, вы должны избежать его, удвоив его в строке формата:

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

Ваша строка формата

"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);
Другие вопросы по тегам