2016-12-18 3 views
-2

Мне просто интересно узнать, что является лучшим способом вставки значений в строку в java, например, что программист Java будет делать при вставке значений, и скажите, почему?Лучший способ вставки записи в базу данных

Это так?

String query = "insert into table (table1) values (1)"; PreparedStatement stmt = connection.preparedStatement(query); stmt.execute();

или как это?

String query = "insert into table (table1) values (?)"; PreparedStatement stmt = connection.preparedStatement(query); stmt.setInt(1,"1"); stmt.execute();

Или есть лучший способ?

просто прошу, чтобы улучшить свои знания кодирования: D

+0

ВСЕГДА используйте второй вариант. Если вы используете первый вариант и создаете инструкцию из жестко закодированных строк и ввода пользователя, вы будете открыты для SQL-инъекции. Второй метод следует использовать всякий раз, когда у вас есть переменные данные. –

ответ

1

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

Когда вы разрешаете пользователю вводить данные (где пользователи могут решить, какие значения входят в запрос), то второй параметр позволяет поместить значения в безопасное состояние в запрос. Это, с другой стороны, не очень большой нет-нет:

String userInput = askUserForSomeValue(); 
String query = "insert into table (table1) values ("+userInput+")"; 
PreparedStatement stmt = connection.preparedStatement(query); 
stmt.execute(); 

Поскольку это позволяет пользователям отправлять SQL injection строки.

+0

ой, так что это зависит от ситуации, спасибо большое –

0

Вообще Prepared Заявление рассматривается вместо нормального Statement из-за его предварительно компиляции и кэширование DB стороне заявления, которое в идеале приводит к общему быстрого выполнения и возможность повторного использования того же оператора SQL в пакетах. Это также довольно безопасно в предотвращении SQL Injects.

Возможно, это thread.

+0

Я прочитал нить, поэтому утверждение намного медленнее, когда дело доходит до скорости компиляции и подготовленного состояния намного быстрее, потому что ее не нужно компилировать, но в в некоторых случаях утверждение очень эффективно. –

+0

Спасибо, многому научился –

0

PreparedStatements - это путь, потому что они делают невозможным SQL-инъекцию. Вот простой пример с введенным пользователем в качестве параметров:

PreparedStatement stmt = conn.prepareStatement("INSERT INTO person (value) values (?)"); 
stmt.setInt(1,userinput); 
stmt.executeUpdate(); 
+0

где con - объект соединения –

Смежные вопросы