Не делай этого.
Не по соображениям производительности (которые будут незначительными по сравнению со стоимостью запроса к базе данных), но во избежание атак с использованием SQL-инъекций. Что произойдет, если data[0]
на самом деле строка
' OR 'x' = 'x
Тогда вы получите SQL-выражение:
SELECT * FROM my_table WHERE col1='' OR 'x' = 'x'
Я думаю, что мы можем согласиться, это не то, что вы хотели.
Вместо этого используйте параметризованный оператор SQL (PreparedStatement
) и заставьте драйвер базы данных отправлять значения параметров отдельно.
РЕДАКТИРОВАТЬ: В других комментариях OP указал, что строка шаблона может быть довольно длинной, и некоторые параметры могут фактически включать несколько начальных значений, объединенных вместе. Я все еще говорю, что стоимость замены, вероятно, будет незначительной в великой схеме вещей, и я все еще говорю, что PreparedStatement
- это путь. Вы должны выполнить любые операции объединения, которые вам нужны для ввода, прежде чем устанавливать их в качестве значений для PreparedStatement
- поэтому шаблону может понадобиться SQL с заполнителями SQL, а затем «подшаблоны», чтобы выяснить, как перейти от вашего ввода к параметры для PreparedStatement
. Что бы вы ни делали, ввод значений непосредственно в SQL - неправильный подход.