2012-11-30 2 views
0

내가 가지고 SQL 쿼리를 실행에 다음 코드 : 데이터 집합자바 SQL 쿼리 문자열에 인용

query = String.format("select * from users where user_name = '%s';", results.getString(1)); 
results2 = mStmt.executeQuery(query); 

한 _ 이름 값 "오브라이언"을 가지고있다. .이 때문에 "오브라이언의 단일 괄호 내 쿼리 유적 쿼리가 될 것입니다 :

select * from users where user_name = 'O'brien' 

가 데이터를 수정이를 극복하지하기위한 전략이란

편집 : 준비된 문은 문제의 일부일 뿐이지 만 작은 따옴표 문제를 해결합니다. 내가 가진 문자열 값 중 하나가 "UNDER"라는 단어를 포함하고 있는데, 이는 SQL 키워드입니다. 예를 들어 쿼리에 insertAll이라는 preparedStatement가 있습니다.

insert into names (id, val1, val2, val3, val4, tTime, val5) values (?, ?, ?, ?, ?, ?, ?) 

모든 도움에 감사드립니다!

+0

당신이 무슨 뜻인지 설명 할 수 있습니까? – CodeKingPlusPlus

+0

쿼리 매개 변수 – Phil

+0

과 함께 [PreparedStatement] (http://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html)를 사용하십시오. 준비된 문에 대한 쿼리는 다음과 같아야합니다. "(id, val, val1, val2, val3, val4, tTime, val5) 값 (?,?,?,?,?,?,?)"을 삽입하고 **? ** 명령문에 추가하려는 모든 매개 변수에 대한 기호. –

답변

5

prepareStatement를 사용하여 매개 변수를 설정하십시오. 귀하의 코드는이 책의 SQL 주입 코드입니다. http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

+0

지금 준비된 선언문을 사용하고 있는데 여전히 공백 문자로 실패합니까? – CodeKingPlusPlus

+0

@ CodeKingPlusPlus는 코드를 업데이트하여 새로운 문제가 있는지 확인합니다. –

+0

내 편집을 보았습니까? 내 다른 문제가 SQL 키워드 였음을 발견했습니다 – CodeKingPlusPlus

1

대신 PreparedStatement을 사용하지 않으려면 SQL 쿼리에서 따옴표를 이스케이프 처리하는 지루하고 오류가 발생하지 않는 문제를 피하십시오?

은 다음과 같이 보일 것 수 (미안 해요, 난 사실이 실행되지 않은,하지만 당신은 아이디어 가야) :

query = "select * from users where user_name = ?"; 
PreparedStatement p = new PreparedStatement(con, query); 
p.setString(1, results.getString(1)); 
results2 = p.executeQuery(); 
+0

준비된 문은 내 문제 중 하나를 수정합니다. 이제는 공백으로 기괴한 문제가 생깁니 까? – CodeKingPlusPlus

+0

공백 문제는 어디에 있습니까? 쿼리에서 데이터베이스의 이름에 출력? 전혀 다른 질문처럼 들립니다. –

+0

사실 나는 그것을 알아 내었습니다. UNDER와 같은 키워드는 마음에 들지 않습니다.어떻게 해결할 수 있을까요? – CodeKingPlusPlus