mysql 테이블의 대부분의 열에서 결과를 검색하고 반환 할 수 있기를 원합니다. 나는 myisam db와 전체 텍스트 검색을 사용하는 것을 고려했지만, 성능에 영향을 미치므로 innodb를 고수하는 것이 더 좋을 것이라고 결정했습니다. 나는 또한 Solr과 같은 것을 사용하는 것을 간략하게 생각했다. 그러나 그와 같은 해결책은 내 상황에서 과도한 것처럼 보인다.준비된 문을 사용하여 여러 열의 SQL 쿼리
나는 단순히 연락처 정보 데이터베이스에 검색 기능을 추가하려고합니다. 사용자가 "Smith"라고 말하면 결과가 반환되고 이름, 성 또는 주소에 Smith라는 단어가 포함 된 모든 표 행이 표시되기를 원합니다.
이 방법이 잘못된 방법인지 알려주지 만 이 같은 설정은 표준 SQL 문자열을 사용하여 정착 :이 테이블의 컬럼의 대부분을 포함하기 때문에
SELECT * FROM contacts WHERE firstName LIKE ? OR lastName LIKE ? OR email LIKE ?
은 물론 실제 쿼리 문자열은 상당히 이상이 예보다됩니다.
1) 보안을 위해 데이터베이스를 쿼리 할 때 준비된 문을 사용하는 것을 선호하지만 SQL 문자열을 위의 방법으로 설정할 때 코드는 각 문에 대해 별도의 문을 찾습니다. 어떻게 똑같은 "똑같이"반복 할 수 있을까요? 각 열에 대해? 내가 처음의 PreparedStatement로 문자열을 전달하면
SELECT * FROM contacts WHERE firstName, lastName, email LIKE ?
, 나는 그것이 와일드 카드 (%)로 둘러싸 : 또는 유사한이를 설정하는 방법이있다.
2) VARCHAR 및 INT 열을 모두 검색 할 수 있습니까?
EDIT : 명명 된 매개 변수를 사용할 수 있도록 Spring 프레임 워크의 일부만 사용하여 종료했습니다. 불행하게도 JDBC에는이 기능이 없습니다. 이것은 jdbc jar를 사용할 수 있도록 빌드 경로에 Spring 프레임 워크의 작은 부분을 포함하는 것을 의미했습니다. 또는 쿼리 문자열의 각 매개 변수에 대해 하나의 검색 문자열을 전달할 수는 있지만, 결과적으로 코드를 읽기가 어렵거나 어렵습니다. 동일한 문자열을 사용하여 해킹하지 않으려 고했습니다. 매개 변수.
나는 그렇게 생각합니다. preparedstatements를 사용하는 것은 어떻습니까? 하나의 값만 전달하고 모든 값을 사용할 수 있습니까? 문자열에? – ryandlf
그렇지 않으면 매개 변수 'numbers'를 기반으로하므로 명명 된 매개 변수 (예 : : foo)를 사용할 수 있어야합니다. – judda
오류 ... 불행히도 JDBC를 사용하고 있으며 명명 된 매개 변수를 지원하지 않습니다. – ryandlf