как правильно составить запрос jdbc update

248
23 июня 2017, 07:03

Есть код на обновление таблиц mysql но что-то не могу разобраться с кавычками, смысл в том, что в таблицу users нужно заполнить столбец proclist переменной lp , где ip определяется из переменной ownip. ,столбец ip уже заполнен

String[] insert = {"UPDATE `users` SET `proclist` = `" + lp + " ` WHERE `ip` = `" + ownip + "`"};

 for (String sql : insert) {
  stmt.executeUpdate(sql);
}
Answer 1

Окружите текстовые переменные одинарными кавычками, например:

ResultSet rs = stmt.executeQuery ("UPDATE `users` SET `proclist` = ' " + lp + " ' WHERE `ip` = ' " + ownip + " ' ");

Это связано с тем, что SQL ожидает, что строки будут окружены одинарными кавычками. Еще лучшей альтернативой было бы использование подготовленных запросов:

PreparedStatement stmt = con.prepareStatement ("SELECT * FROM` prices` WHERE `poster` =?");
Stmt.setString (1, плакат);
ResultSet rs = stmt.executeQuery ();

Рекомендуется использовать PreparedStatement, поскольку способ создания запроса (путем объединения строк) позволяет злоумышленнику вводить произвольный код SQL в запрос, угрозу безопасности, известную как SQL-инъекция.

Answer 2

НЕ создавайте SQL-команды, конкатенируя строки. Я думал, что мы давно это пережили. Это очень плохая практика и очень хороший способ создать ошибки и позволить огромные дыры в безопасности в ваших приложениях. Создание операторов SQL путем конкатенации строк - это рецепт катастрофы и плохой привычки, которую нужно убить до ее формирования.

Создай подготовленный запрос, и в цикле устанавливай параметры и выполняй запрос. Также можно использовать pstmt.addBatch(); pstmt.executeBatch();

Пример

String sql = 
   "UPDATE GLOBALSETTINGS " + 
   "  SET settingValue = ? " + 
   "WHERE settingName = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "40");
pstmt.setString(2, "SessionTTL");
pstmt.executeUpdate();
pstmt.setString(1, "20");
pstmt.setString(2, "MaxUsersActive");
pstmt.executeUpdate();
READ ALSO
Адаптивная вёрстка блоков

Адаптивная вёрстка блоков

Есть некоторый html

365
Переключатель на jquery

Переключатель на jquery

Немного представленияБлок поделен на 2 части левая и правая

286