Переданное в БД 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 шт):
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();