2012-04-14 2 views
0

문자열 [] 가능성이 있습니다. 이 배열은 런타임 중에 데이터베이스 테이블의 열 이름을 동적으로 저장합니다. 그리고 런타임에 프로그램의 크기를 이해합니다.SQL에서 잘못 해석 된 Java 문자열

temp = " "+likely[0]+"='Likely' AND "+ 
    likely[1]+"='Likely' AND "+ 
    likely[2]+"='Likely' AND " 

지금 내가

으로 SQL 쿼리를 공식화처럼 지금 크기가 3 인 경우

for(int k=0;k<likely.length;k++) 
    { 
     temp1="\"+likely["+k+"]+\"='Likely' AND "; 
     temp=temp.concat(temp1);     
    } 

최종 온도의 모양을 문자열의 concatanation에 대한 루프를 사용 .I SQL 쿼리에이를 넣어

sql ="SELECT * FROM PUNE WHERE"+temp+"Arts_And_Museum='Yes'"; 

그러나

ps = con.prepareStatement(sql); 
동안

이 문이 깊은 조사 후

SELECT * FROM PUNE 
WHERE [+likely[0]+]='Likely' 
AND [+likely[1]+]='Likely' 
AND [+likely[2]+]='Likely' AND Arts_And_Museum='Yes' 

처럼 컴파일, 나는 그것이로 "\ 해석 [나] 교대 ..

는 결과적으로 내가 오류가 있다는 결론에 도달 내가 어떻게해야 이 문제를 해결 하시겠습니까?

나는 루프를 실행하고 문자열 을 준비 나는 SQL 구문

답변

0

\ 예약 문자가에게 쓰기를 시도하고있다. 문자열에 따옴표를 출력하려면 \"을 사용하십시오.

그래서,이 코드 :

temp1="\"+likely["+k+"]+\"='Likely' AND "; 

이 문자열 반환합니다 :

"+likely1]+"='Likely' AND

것 같다 당신의 SQL이 변형되는 것을를 "[로 또는 ]

0

기호 \은 이스케이프에 사용됩니다. 이렇게하면 모든 앞 문자를 벗어납니다. 당신이 배열의 항목에 대한 요구 때마다

당신이 여기 likey["k"]

에 대한 likely[k] 필요가 없습니다를 사용하여 액세스 할 수 있습니다 당신이 그것을해야하는 방법이다.

temp1="\\"+likely[k]+"\\='Likely' AND "; 
1

이 때문에 SQL 쿼리를 처리 할 때 매개 변수화 된 입력을 사용해야합니다.이 일에

temp1="\"+likely["+k+"]+\"='Likely' AND "; 

:

// conn refers to your database connection 
PreparedStatement stmnt = null; 
ResultSet rs = null; 
try { 
    stmnt = conn.prepareStatement("SELECT * FROM tbl WHERE col > '?'"); 
    stmnt.setInt(1, 300); //set first parameter to 300 
    rs = stmnt.executeQuery(); 
} catch(Exception ex) { 
    System.err.println("Database exception: " + ex.getMessage()); 
} 
+0

당신이 SQL로 해석되지 않습니다 – Ozzy

0

그냥이 줄을 변경

temp1="\"" + likely[k] + "\"='Likely' AND "; 
+1

고마워 MOSTY Mostacho 어떤 삽입 값을 매개 변수화 할 때! ! 너는 생명의 은인이다 –

+0

@ ShwetaB.Patil Welcome ^.^어쨌든, 감사 할 필요가 없다. 그 대답을 받아들이는 것이 거기있다. –