2013-11-27 3 views
2

내가이 내 코드입니다 스프링 JDBC 어떤 database.?can에서 레코드를 검색하는 동안 .I 박스 오류에서 배열 인덱스를 얻고있다에 (사용하여 특정 열을 검색하는 방법에 대한 예) 새로운 줄입니다 :In을 스프링 jdbc를 사용하고 있습니까?

SEVERE: Servlet.service() for servlet spring threw exception 
java.lang.ArrayIndexOutOfBoundsException: 0 
at com.mysql.jdbc.PreparedStatement.setBinaryStream(PreparedStatement.java:3197) 
at com.mysql.jdbc.PreparedStatement.setSerializableObject(PreparedStatement.java:4338) 
at com.mysql.jdbc.PreparedStatement.setObject(PreparedStatement.java:3985) 
at org.springframework.jdbc.core.StatementCreatorUtils.setValue(StatementCreatorUtils.java:365) 
at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValueInternal(StatementCreatorUtils.java:217) 
at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValue(StatementCreatorUtils.java:145) 
at org.springframework.jdbc.core.ArgPreparedStatementSetter.doSetValue(ArgPreparedStatementSetter.java:65) 
at org.springframework.jdbc.core.ArgPreparedStatementSetter.setValues(ArgPreparedStatementSetter.java:46) 
at org.springframework.jdbc.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:644) 
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:589) 
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:639) 
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:668) 
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:676) 
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:720) 
at com.pc.dao.PCDaoImpl.getAccounts(PCDaoImpl.java:60) 
at com.pc.services.PCServiceImpl.getAccounts(PCServiceImpl.java:17) 
at com.pc.controllers.PCController.domainChange(PCController.java:27) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:219) 
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132) 
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) 
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:745) 
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:686) 
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) 
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925) 
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) 
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936) 
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:827) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
+1

'JdbcTemplate'은 동적 인 IN 절을 지원하지 않으며, 명명 된 매개 변수를 지원하지 않습니다. 이를 위해'NamedParameterJdbcTemplate'을 사용하십시오. 성능 팁, 필요할 때마다'JdbcTemplate'을 생성하지 말고, 단일 인스턴스를 생성하고 재사용하십시오. –

답변

0

당신은 당신의 SQL 쿼리에 매개 변수 이름을 지정할 경우

, 당신은 다음 NamedParameterJdbcTemplate 봄 클래스를 사용해야합니다 :
public List<ProjectInfo> getAccounts(List<String> domains) { 
    List<ProjectInfo> accountList=new ArrayList<ProjectInfo>(); 
    String sql= "select * from dep_pid_exc where sub_vertical in(:verticals)"; 
    JdbcTemplate jdbcTemplate= new JdbcTemplate(dataSource); 
    Map<String, List<String>> params= Collections.singletonMap("verticals",domains); 
    accountList =jdbcTemplate.query(sql,new PCRowMapper(),params); 
    return accountList; 
} 

내가이 오류를 얻고있다. 자세한 내용은 example을 참조하십시오.

내 생각에 IN 문에 대한 유일한 옵션은 NamedParameterJdbcTemplate입니다.

+0

내 문제를 해결해 주셔서 감사합니다. – user3041176

관련 문제