Есть ли разница и что лучше использовать: String.format()
и вручную вставить значения или PreparedStatement
и проанализировать значения для заполнителей (что больше размера кода)?Строковый формат (или аналогичная функция) или PreparedStatement
ответ
Как правило, никогда не используйте форматирование простой строки где PreparedStatement
может использоваться. Этот последний знает о синтаксисе SQL вашей базы данных. И будет заботиться о «защите» каждого специальных символов намного лучше вас.
Несоблюдение этого правила приведет к высоким рискам SQL Injection в вашем коде.
Существует принципиальная разница: а PreparedStatement
сделает все, что требуется, чтобы значения вы подаете к нему (через .set*()
метод) приходят как «нейтральный» в базу данных (или, скорее, «движок JDBC»).
Отметьте, что PreparedStatement
является интерфейсом . Таким образом, при использовании драйвера JDBC для того или иного механизма базы данных он сможет действовать по-разному в зависимости от указанного движка.
Не используйте для этого String.format()
. Его роль совершенно иная! String.format()
не может предотвратить атаки SQL-инъекций; PreparedStatement
может, если его разработчик действительно сделал, действительно Плохая работа.
В качестве побочного примечания вы ищете «лучшую практику» ... но спрашиваете «что такое размер кода». Вы должны понимать, что _quality_ не то же самое, что _quantity_. –