Это не совсем тот способ, которым вы должны создавать и выполнять запрос SQL INSERT с переменными. Это не только склонно к атакам SQL-инъекций , но и довольно .. громоздко;) Возможно, значение содержало одинарную кавычку и приводило к тому, что ваш запрос был синтаксически неверным.
Только не объединяйте строки в переменную SQL. Вместо этого используйте PreparedStatement
( учебник здесь ) в сочетании с ?
в качестве заполнителя для переменной в строке SQL. Таким образом, вы можете красиво разместить полноценные объекты Java (включая Date
и InputStream
!) В выражении SQL по индексу значения, не беспокоясь о символах в строках, которые могут синтаксически нарушать запрос SQL (и, следовательно, также вызывать риски внедрения SQL).
Вот базовый пример, основанный на вашем исходном запросе SQL:
private static final String SQL_INSERT = "INSERT INTO CURRENT_WEATHER_US"
+ " VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
public void create(String cityCode, Weather weather) throws SQLException {
try (
Connection connection = database.getConnection();
PreparedStatement statement = connection.prepareStatement(SQL_INSERT);
) {
statement.setString(1, cityCode);
statement.setString(2, weather.getCity());
statement.setString(3, weather.getRegion());
// ...
statement.setString(20, weather.getForecastCode());
statement.executeUpdate();
}
}
Чтобы узнать больше об использовании basic JDBC надлежащим образом, вы можете найти эту статью полезной.
Надеюсь, это поможет.