2009-08-05 8 views
0

Java JDBC를 사용하여 사용자 입력을 oracle에 삽입하려고합니다. 삽입 쿼리를 사용해야합니다.Java Oracle insert 쿼리

오라클의 열 유형은 varchar2입니다.

사용자가 특수 문자를 입력하지 않으면 삽입 할 수 있습니다. 사용자가 #와 (과) 같은 특수 문자를 입력하면?/및 $ 예외가 발생했습니다

이러한 특수 문자를 구문 분석하는 데 도움을주십시오. 삽입 쿼리를 사용할 필요가 없습니다. 저장 프로 시저 또는 호출 가능 문을 프로젝트에 사용할 수 없습니다.

감사합니다.

답변

7

지금까지 내가 아는 한 오라클은 당신이 그렇게 문자열 값을 벗어날 필요가 없습니다 :

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

하이 닉, 회신 감사합니다 '밥이 말했다 예를 들어, 견적을 두 배로. 에게 오라클이 필요하지 않습니다 UR 권리를 이스케이프 문자열 ..하지만 삽입 할 때? 자바를 통해 .. 그것은 실제로 문자열의 일부인 매개 변수로 간주합니다 –

+0

안녕하세요 Ajay - 자바 코드를 게시 할 수 있습니다. 위의 두 예제에서 나는 생각, 운전자는 필요한 탈출을 처리해야합니다. –

1

SQL 문자열 상수에서 이스케이프해야하는 유일한 문자는 작은 따옴표입니다. 그렇지 않으면 문자열 끝에 대해 ​​혼동 될 수 있습니다.

JDBC PreparedStatement를 사용하는 경우 물음표는 매개 변수를 나타냅니다. 당신은 MYTABLE에

삽입처럼 작성할 수 (필드 1 FIELD2) 값 (?,?)

다음이 값을 설정하는 설정 문을 사용합니다. 당신이 따옴표로 물음표를 묶으면, 그냥 (필드 1 FIELD2) MYTABLE로, 즉

삽입 문자열에 다른 문자해야 값을 (?, '?')

하나 개의 매개 변수가? 그리고 하나의 문자열 리터럴 '?'.

PreparedStatement.set은 필요한 이스케이프 이스케이프 처리를 수행합니다. 직접 쿼리를 작성하는 경우 이스케이프를 수행하는 코드를 포함해야합니다. (그냥 MYTABLE (필드 1) 값에

삽입 ('안녕하세요' '')