2009-08-05 3 views
0

Я пытаюсь вставить вход пользователя в oracle с помощью Java JDBC. Мне нужно использовать запрос Insert.Java Oracle insert Query

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

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

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

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

ответ

7

Насколько я знаю, 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-инъекций.

+0

Привет Ник, Спасибо за ответ. ур право, что оракул не требует escape string .. но когда я пытаюсь вставить? через java .. он рассматривает как параметр, который на самом деле является частью строки – 2009-08-05 14:10:10

+0

Привет, Ajay - пожалуйста, можете ли вы разместить свой Java-код. В обоих примерах, которые я привел выше, я думаю, что драйвер должен иметь дело с любым возможным экранированием. –

1

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

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

вставки в туЬаЫй (field1, field2) значение (?,?)

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

вставки в туЬаЫе (field1, field2) значения (?,?)

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

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

вставки в MYTABLE (FIELD1) значения («сказал Боб,„“Привет» «»)