не делают. Используйте. Строка. Конкатенация. Для. Построить. SQL. Заявления. Есть несколько причин для этого, не в последнюю очередь это одна:
... и обнуляет являются одна из этих причин. Подробнее: http://bobby-tables.com Это также действительно легко запутаться при этом (например, в вашем примере есть, например, '
).
На данный момент проигнорируем null
: Что, если значение, которое вы помещаете в строку, содержит '
? Теперь у вас сломанная строка SQL.
Вместо этого используйте PreparedStatement
:
PreparedStatement ps = conn.prepareStatement(
"UPDATE [Artists] SET [Website] = ? WHERE [ID] = ?"
);
ps.setString(1, artist.getWebsite());
ps.setInt(2), artist.getID());
Обратите внимание, что нет никаких кавычек вокруг ?
где мы собираемся поставить строку; PreparedStatement
обрабатывает правильное цитирование и экранирование содержимого для вас.
Я думаю setString
позволяет установить null
с, но я не сделал JDBC материал в то время. Для столбцов, отличных от String, вы должны использовать setNull
; Вы может нужна ветвь, если setString
не рад это сделать, например .:
PreparedStatement ps = conn.prepareStatement(
"UPDATE [Artists] SET [Website] = ? WHERE [ID] = ?"
);
String web = artist.getWebsite();
if (web == null) {
ps.setNull(1, JDBCType.NVARCHAR);
} else {
ps.setString(1, web);
}
ps.setInt(2), artist.getID());
... но дать setString
идти первым.
Пожалуйста, смотрите в 'PreparedStatement's. Ваш код уязвим для инъекций SQL. –