【问题标题】:How to use array in spring jdbc如何在spring jdbc中使用数组
【发布时间】:2016-12-15 08:42:57
【问题描述】:

我正在使用弹簧 jdbc 。我的 sql 查询涉及“IN”子句,我动态创建“?”基于输入并通过 spring jdbc模板查询方法的对象数组。

 public  List<Student> getStudentName(String studentId){
  //studentId contains  number of ids sepeated by comma.
 Object [] params= new Object[]{studentId.split(",")}
  Stream<String>  stream= Arrays.stream(studentId.split(","));

 final String stInClauseParameters= stream.map(studentId -> "?").collect((Collectors.joining(",")));


  StringBuilder sql = new StringBuilder();
  sql.append(" select studentName from Student where  student_id IN ("+stInClauseParameters+")")
  return JdbcTemplate.query(sql.toString(),params, new BeanPropertyRowMapper(Student.class))

  }

错误

Prepared Statement: Input parameter not set, index: 1.; nested exception is java.sql.SQLException: JZ0SA: Prepared Statement: Input parameter not set, index: 1

spring jdbc查询方法中如何使用数组?

【问题讨论】:

    标签: java spring jdbc spring-jdbc


    【解决方案1】:

    更简单的方法是使用可以为您动态处理 in 子句的 NamedParameterJdbcTemplate。

    一个例子是

    public class StudentDao extends JdbcDaoSupport {
    
    
    public List<Student> getStudentName(String studentId) {
    
        List<String> studentIds = Arrays.asList(studentId.split(","));
        String sql = "SELECT studentName FROM Student WHERE student_id IN (:ids)";
    
        Map<String, List<String>> params = new HashMap<String, List<String>>();
        params.put("ids", studentIds);
    
        NamedParameterJdbcTemplate template = new    NamedParameterJdbcTemplate(getDataSource());
        return template.query(sql, params, new BeanPropertyRowMapper(Student.class));
    }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多