2011-10-11 4 views
3

28000 번 연속 실행해야하는 쿼리가 있으므로 preparedStatement를 사용하는 것이 영리한 생각 일 것이라고 생각했습니다. '피카추 나의 영웅'과이에 작성하는 것이 좋습니다 우리가 퍼지 방법 같은 분할 할 단어를 잘 수행하지 않는 것을 알게 될 때까지CONTAINS 쿼리가있는 PreparedStatement

String requestWithFirstName = "SELECT SE.ELEMENT_ID, SE.LASTNAME||' '||SE.FIRSTNAME AS ELEMENT, (SCORE(1)+SCORE(2))/2 AS SCORE " 
         + "FROM BL_SUSPICIOUS_ELEMENT SE " 
         + "WHERE CONTAINS(SE.LASTNAME, 'fuzzy({' || ? || '},' || ? || ',' || ? || ', weight)' , 1)>0 " 
         + "AND CONTAINS(SE.FIRSTNAME, 'fuzzy({' || ? || '},' || ? || ',' || ? || ', weight)' , 2)>0 " 
         + (type > 0 ? "AND SE.ELEMENT_TYPE_ID = ?" : "") 
         + " ORDER BY SCORE DESC"; 

Everthings가 잘 작동 : 여기

내 쿼리입니다 '피카추'에 대한 4 가지 퍼지 검색은 ''내 ''영웅 '입니다. 이것이 사실인지 확실하지는 않지만 쿼리를 28000 번 실행하면 실제 상황을 볼 수있는 좋은 기회입니다. 이 경우

"SELECT A.ELEMENT_ID, A.LASTNAME||' '||A.FIRSTNAME AS AKA, SCORE(1) AS SCORE " 
     + "FROM BL_AKA A, BL_SUSPICIOUS_ELEMENT SE " 
     + "WHERE CONTAINS(A.LASTNAME, ?, 1)>0 " 
     + "AND SE.ELEMENT_ID = A.ELEMENT_ID " 
     + (type > 0 ? "AND SE.ELEMENT_TYPE_ID = ?": "") 
     + " ORDER BY SCORE DESC"; 

:

그래서 나는이 방식으로 쿼리를 수정하려고?

'fuzzy({Burnham},70,4,weight),fuzzy({Investors},70,4,weight),fuzzy({Trust},70,4,weight)'

쿼리가 SQL dev에 실행중인 것 같습니다. 그러나 자바에서는 다음 오류가 발생합니다.

ORA-20000: Oracle Text error: DRG-50900: text query parser error on line 1, column 30
DRG-50920: part of phrase not itself a phrase or equivalence
DRG-50900: text query parser error on line 1, column 30
DRG-50920: part of phrase not itself a phrase or equivalence

어떤 조언이 있습니까? 이것은 in 문과 같은 상황인지 궁금합니다 (포켓몬에서 select *를 생성 할 수없는 곳은 (?)의 괴물)

고마워요!

답변

4

java에서 준비된 문을 사용하면 사용하는 방법에 따라 매개 변수가 설정됩니다. 그래서

String s = "'fuzzy({Burnham},70,4,weight),fuzzy({Investors},70,4,weight),fuzzy({Trust},70,4,weight)'"; 
statement.setString(s); 

다시 탈출 결과됩니다 따옴표없이 매개 변수를 설정하는

'''fuzzy({Burnham},70,4,weight),fuzzy({Investors},70,4,weight),fuzzy({Trust},70,4,weight)''' 

보십시오.

IN (?) 문을 만들 수 있습니다. 그러나 모든 매개 변수에 대해 물음표를 추가해야합니다. WHERE monster IN (?,?,?,?,?,?) ...

+0

감사합니다. 실제로 실수였습니다. 완벽하게 작동합니다! – Farid