2010-08-24 5 views
0

Java에있는 목록에도 존재하는 항목이 표에 있는지 알아야합니다. 논리적 인 해결책은 "SELECT column FROM table WHERE column IN (?)"일 것입니다. 내가 Java에서 가지고 배열에,하지만 setArray는 java.sql.Array에 대한 질문을하고 정말 어떻게 하나를 얻을 수 있는지, 그리고 내가 정말로 무엇을 찾고있는 경우.MySQL에서 MySQL의 IN 문 사용

+0

DB에 액세스하기 위해 사용하는 API는 무엇입니까? 'setArray' 메소드는 무엇입니까? –

+0

JDBC를 사용하고 있습니다. – Robber

답변

1

JDBC에서는이 작업을 수행 할 수 없지만 스프링 또는 최대 절전 모드를 사용하는 경우 매개 변수 목록을 올바른 수로 풀기 위해 쿼리를 다시 작성할 수 있습니다.

Query query = session.createQuery("select x from y where z in (:params)"); 
query.setParameterList("params", paramList); 
List list = query.list(); 

봄에는 NamedParameterJdbcTemplate을 사용해야합니다. 매개 변수를 가정

+0

아니, 스프링도하지 않습니다. – duffymo

+0

@duffymo : 봄 않습니다 : http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/jdbc.html#jdbc-in-clause – axtavt

+0

수정 주셔서 감사합니다 axtavt - 나는 아직 Spring 3.x를 소화하지 않았다. – duffymo

3

아니요, 불가능합니다.

  1. 하는 각 값에 대해 ? 바인딩을 추가

    불행하게도, 인디애나 두 단계가 필요합니다. 값 이상

  2. 루프와는 ?

에 그것을 할 수있는 쉬운 방법을 바인드합니다.

+0

나는 jGuru 솔루션을 시도하고 실제로 작동하는지 확인하기 위해 내 대답을 downvotes 모든 사람에게 물어볼 것입니다. 실패 할 경우, 투표를 다시 시작하십시오. – duffymo

+0

예. jGuru 메서드가 실패하거나 여기에 적용 할 수없는 경우 제 응답을 삭제하겠습니다. 불행히도 직접 테스트 할 수는 없습니다. –

+0

맞습니다. 이것이 유일한 방법입니다. – Henning

0

모든 프로그램 로직에 의해 발생하는 SQL 주입의 위험이없는 즉, 그때

String status = "'Pending','Approved'"; 
String sql = "SELECT * FROM table "; 
     sql += "WHERE status IN (" + status + ")"; 
ps = conn.prepareStatement(sql); 

매개 변수하면 ... 그것은 좋은 오래된 문자열 조작에 의존 괜찮습니다 생각 어떤 식 으로든 사용자 입력에 의해 생성되면 SQL 인젝션까지 열립니다. 그러나 앱 코드에서 매개 변수를 제어하는 ​​경우 문제가 발생하지 않습니다.

배열에서 전달하는 경우 매개 변수 문자열을 작성할 때 각 매개 변수를 따옴표로 묶어야합니다.

가장 간단한 솔루션이 일반적으로 더 좋습니다.