Java Oracle Вставить запрос - PullRequest
0 голосов
/ 05 августа 2009

Я пытаюсь вставить пользовательский ввод в Oracle с помощью Java JDBC. Я должен использовать запрос вставки.

Тип столбца Oracle: varchar2.

Я могу вставить, если пользователь не вводит специальный символ. когда пользователь вводит специальный символ, такой как #? / и $ это дает исключение

Пожалуйста, помогите разобрать эти специальные символы. мне нужно использовать запрос вставки, я не могу использовать хранимую процедуру или оператор вызова в моем проекте.

Спасибо за ваше время.

Ответы [ 2 ]

7 голосов
/ 05 августа 2009

Насколько я знаю, Oracle не требует, чтобы вы экранировали строковые значения так:

INSERT INTO some_table (my_varchar_column) VALUES ('my string with a ?');

должно работать.

Но для уверенности используйте java.sql.PreparedStatement следующим образом:

PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO some_table (my_varchar_column) VALUES (?)");
preparedStatement.setString(1, "my string with a ?");
preparedStatement.execute();

Использование подготовленного оператора обычно является рекомендуемым способом выполнения SQL для базы данных. Это повысит производительность и предотвратит атаки с использованием SQL-инъекций.

1 голос
/ 05 августа 2009

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

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

вставить в mytable (field1, field2) значения (?,?)

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

вставить в mytable (field1, field2) значения (?, '?')

имеет ОДИН параметр? и один строковый литерал '?'.

PreparedStatement.set выполнит необходимое экранирование кавычек. Если вы создаете запрос самостоятельно, вам нужно будет включить код для этого. (Просто удвойте цитату, например,

вставить в mytable (field1) значения («Боб сказал,« Привет »»)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...