java - In() 使用 spring jdbc?

标签 java spring jdbc

我是 spring jdbc 的新手。我在从数据库中检索记录时遇到开箱即用的数组索引错误。可以举例说明如何使用 IN() 检索特定列 这是我的代码:

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;
}

我收到这个错误:

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)

最佳答案

如果你想在你的 SQL 查询中命名你的参数,你应该使用 NamedParameterJdbcTemplate spring 类。看这个example了解更多详情。

据我所知,NamedParameterJdbcTemplateIN 语句的唯一选择。

关于java - In() 使用 spring jdbc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20239296/

相关文章:

Java私有(private) Assets 放在哪里?

java - 我们可以将 angular2 universal 与服务器端 JAVA 一起使用吗

java - 使用 JDBC 将对象(文档文件)存储到 SQL 中

java - 连接eclipse和数据库

java - 即使评估为真,如果语句也不会执行

java - 如何使用数组列表? [哎呀]

java - 如何处理数字格式异常并将 int/double 变量替换为默认值 0/0.0?

java - 基于 java 的应用程序的 Docker 镜像生命周期

java - 将日期从 HTML 表单传递到 servlet 再到 SQL 数据库

java - 如何在 java spring 中自定义字体