JDBC

2010-07-10 6 views
2

와 비교 함수에서 MySQL을 사용하는 방법이 간단한 것 같지만 내가 더 프레임 워크와 직접 JDBC를 사용하는 기존 응용 프로그램을위한 ...JDBC

웹을 검색하는 것은 불가능합니다, 나는 데 몇 가지 새로운 기능을 추가 할 수 있습니다. JDBC를 통해 IN() 함수를 사용하는 방법을 찾는 데 문제가 있습니다.

나는이 (가) ... 값의 배열입니다 다음

SELECT * from animals WHERE animal_name IN (...) 

같은 쿼리를 가지고 싶습니다. JDBC를 사용하여 다음과 같이 할 것이라고 생각합니다.

하지만이 방법은 효과가 없으며 웹에서 이에 대한 언급을 찾을 수 없다는 것을 발견했습니다.

+0

PreparedStatement 매개 변수는 쉼표로 구분 된 필드 목록이 아닌 데이터 유형에 기반한 단일 값이기 때문입니다. 데이터베이스 외부에서 동적 SQL을 사용하려면 conn.prepareStatement (...) 전에 문자열로 SQL 문을 작성하십시오. –

+0

단지 관찰이지만, 명령문 끝 부분에 세미콜론이 필요합니까? –

+0

[IN 절을 매개 변수화하는 데 JDBC를 사용하는 가장 좋은 방법은 무엇입니까?] (http://stackoverflow.com/questions/2861230/what-is-the-best-approach-using-jdbc-for-parameterizing- an-in-clause) – BalusC

답변

1

같은 것을 사용하여 코드를 바꿉니다 :이와 함께 2 부 대체 할 JdbcTemplate 스프링 JDBCs를 사용하여, 대안으로

StringBuilder sb = new StringBuilder("SELECT * from animals WHERE animal_name IN ("); 
// 1. assemble query parameters 
for (int i = 0; i < arrayVals.size(); i++) { 
    sb.append("?"); 
    if (i + 1 < arrayVals.size()) sb.append(","); 
} 
sb.append(")"); 
// 2. add the variables 
PreparedStatement st = conn.prepareStatement(sb.toString()); 
for (int i = 0; i < arrayVals.size(); i++) { 
    // May need to replace setter depending on type of object 
    st.setObject(i + 1, o); 
} 

:

jdbcTemplate.query(sb.toString(), arrayVals.toArray(), animalRowMapper); 

JdbcTemplate을 각에 필요한 SQL 유형을 결정합니다 매개 변수.