Оператор sql, выполняемый в java, не справляется с форматом даты

Доброе утро. Я столкнулся с очень интересной проблемой при выполнении SQL-оператора. Чего я пытаюсь достичь: дата должна быть вставлена ​​в базу данных в виде строки вместе с целым числом.

try {
    DBHelper.st.execute("INSERT INTO days VALUES('"
        + date + "'," + num + ");");
} catch (SQLException xc) {
    xc.printStackTrace();
}

Соединение с базой данных работает безупречно, и две переменные вставлены в базу данных. Однако дата String, похоже, изменилась в процессе.

String date = "2018-04-11";

При последующем выполнении запроса к базе данных (в SQLite3) результат выглядит следующим образом:

2003 | 1

Кто-нибудь здесь испытывал подобное раньше?

Рассмотрите возможность использования параметров запроса вместо того, чтобы вставлять содержимое переменных непосредственно в ваш SQL. xkcd.com/327

khelwood 11.04.2018 13:37

Если вы интерпретируете 2018-04-11 как арифметическое выражение, включающее два вычитания, результатом будет 2003.

Ole V.V. 11.04.2018 13:46

@ArnaudDenoyelle Я не понимаю, почему формат должен быть причиной проблемы, поскольку он все равно сохраняется как String или - в SQL - varchar.

Diabolic Vincent 11.04.2018 13:47

@ oleV.V. Замечательное наблюдение! Нечаянно угадывая где-то в коде, выполняется арифметическая операция. Я собираюсь это дважды проверить. Большое спасибо!

Diabolic Vincent 11.04.2018 13:49

Какие столбцы у вас есть в таблице "дней"? Вы можете показать определение таблицы? И да, повторю уже сказанное, всегда лучше использовать заранее подготовленные запросы с параметрами.

Lev Sivashov 11.04.2018 14:01
0
5
43
0

Другие вопросы по теме