2013-06-24 2 views
1

Есть ли разница и что лучше использовать: String.format() и вручную вставить значения или PreparedStatement и проанализировать значения для заполнителей (что больше размера кода)?Строковый формат (или аналогичная функция) или PreparedStatement

+0

В качестве побочного примечания вы ищете «лучшую практику» ... но спрашиваете «что такое размер кода». Вы должны понимать, что _quality_ не то же самое, что _quantity_. –

ответ

4

Как правило, никогда не используйте форматирование простой строки где PreparedStatement может использоваться. Этот последний знает о синтаксисе SQL вашей базы данных. И будет заботиться о «защите» каждого специальных символов намного лучше вас.

Несоблюдение этого правила приведет к высоким рискам SQL Injection в вашем коде.

См Does the preparedStatement avoid SQL injection?

2

Существует принципиальная разница: а PreparedStatement сделает все, что требуется, чтобы значения вы подаете к нему (через .set*() метод) приходят как «нейтральный» в базу данных (или, скорее, «движок JDBC»).

Отметьте, что PreparedStatement является интерфейсом . Таким образом, при использовании драйвера JDBC для того или иного механизма базы данных он сможет действовать по-разному в зависимости от указанного движка.

Не используйте для этого String.format(). Его роль совершенно иная! String.format() не может предотвратить атаки SQL-инъекций; PreparedStatement может, если его разработчик действительно сделал, действительно Плохая работа.