2016-12-01 5 views
1

Java 응용 프로그램에서 Firebird 데이터베이스를 쿼리하려고합니다. 이 쿼리는 2 개의 정수 변수와 1 개의 문자열을 포함합니다. 쿼리는 다음과 같습니다jdbc 파이어 버드 연결에서 SQL 쿼리에 문자열 변수를 추가하는 방법

Statement statement = conn.createStatement(); 

ResultSet rs = statement.executeQuery("select * from table where 
    column1 < " + intvariable1 + " and ( 
    column2 > " + intvariable2 +" or column2 = 0) and 
    column3 = '" + stringvariable + "' "; 

Rs.next(); 
syso(rs.getInt(1)); 

ResultSet가 비어 있음을 표시하지만 변수 대신 하드 코딩 된 문자열 값을 사용할 때 내가 예상 결과를 얻을.

같은 결과가있는 preparedstatements도 시도해 보았습니다. 문자열 변수없이 작동합니다.

내가 잘못하고있는 아이디어가 있습니까?

편집 : 문제가 해결되었습니다. Stringvariable은 BLOB 필드에서 왔으며 그 안에 빈 값을 가지고 있습니다. 다듬기 기능을 호출하면 해당 기능이 삭제되었습니다.

+0

당신은 문자열 값 주위에 선도적 인 쿼리에서 후행 공백을 가지고 – developer

+1

변수를 통해 전달되는 데이터의 문제처럼 보인다되지 않은 경우, 공백을 잘라. 준비된 진술을 사용하십시오. –

+0

사용 된 값과 반환 할 것으로 예상되는 테이블의 데이터를 표시하십시오. 그리고 준비된 문장을 사용하고 올바르게 사용하십시오. 값을 쿼리 문자열로 연결하지 마십시오. –

답변

0

"column3"줄에는 여는 따옴표와 닫는 따옴표 사이에 공백이 있습니다. 공백으로 시작하고 끝나는 문자열을 의도적으로 일치 시키려하지 않는 한 결과를 찾을 수 없습니다.

column3 = '" + stringvariable + "' "; 
+0

네가 의도적으로 했어. 왜냐하면 내가 이걸 내 전화기에 썼을 때, "and"의 차이를보기가 꽤 어려워 보였기 때문이다. 결국에는이 방법을 미루어 보았다. –