Переданное в БД MySQL число DOUBLE разбивается на несколько колонок

Пытаюсь внести в БД число DOUBLE и дату в формате Date(она правильно записывается)

stat.executeUpdate(String.format("INSERT INTO literDB VALUES (%f, '%s')",  result, date));

В таблице literDB 3 колонки

(ID INT AUTO_INCRIMENT, Result DOUBLE, Date Date)

result является DOUBLE, например 7,81. В БД же от него в колонку ID уходит число 7, а в колонку Result попадает 810000. В БД пробовал выставлять разные параметры типа колонки Result,но не помогает. Неправильно запрос написан? Или в БД что-то не так? Пробовал явно указывать в какие колонки писать данные,но тогда исключение выскакивает


Ответы (1 шт):

Автор решения: insolor
String.format("INSERT INTO literDB VALUES (%f, '%s')",  result, date)

- никогда не делайте так, не используйте форматирование строк для подстановки параметров в SQL запрос. Это в лучшем случае приведет к проблемам типа конвертации чисел в строки с запятой как у вас, в худшем - к уязвимости кода к SQL инъекции. Используйте PreparedStatement.

Чтобы значения попадали в нужные колонки, нужно после имени таблицы перечислить в скобках имена этих колонок.

PreparedStatement pstmt = con.prepareStatement("INSERT INTO literDB (Result, Date) VALUES (?, ?)");
pstmt.setDouble(1, result);
pstmt.setDate(2, date);
pstmt.executeUpdate();
→ Ссылка