java - 如何查询NamedJdbcTemplate中的单个列?

标签 java jdbc spring-jdbc jdbctemplate

如何使用namedParameterJdbcTemplate 查询整数列表?我尝试按照此模板进行操作,但它在下面不起作用。

https://stackoverflow.com/a/40417349/15435022

String customerName = "JOE";
MapSqlParameterSource customerParameters = new MapSqlParameterSource();
customerParameters.addValue("CustomerName", customerName);

private static final String query = "SELECT Customer_Id From dbo.Customers WHERE Customer_Name = :CustomerName";

List<Integer> data = namedParameterJdbcTemplate.queryForList(query, Integer.class);

Error: Cannot resolve method 'queryForList(java.lang.String, java.lang.Class<java.lang.Integer>)'

最佳答案

为什么代码会出错

docs 中所述queryForList 方法有以下可用实现:

  1. queryForList(String sql, Map<String,?> paramMap) .
  2. queryForList(String sql, Map<String,?> paramMap, Class<T> elementType)
  3. queryForList(String sql, SqlParameterSource paramSource)
  4. queryForList(String sql, SqlParameterSource paramSource, Class<T> elementType)

这些实现都不匹配给定实现中使用的参数。因此,我们最终遇到了这个错误:

Error: Cannot resolve method 'queryForList(java.lang.String, java.lang.Class<java.lang.Integer>)'

传递缺失参数背后的想法

传递MapParameterSource背后的关键思想是进行动态查询,稍后我们可以在其中输入值。

例如:

    String query = "Select :columnName from table";
    Map<String,String> map = new HashMap<>();  
    map.put("columnName", "userName");  

当此映射与查询字符串一起传递时,它在内部用于将占位符替换为映射中的值。

如何修复代码

有两种方法可以解决此问题:

  1. 只需传递null

这不是解决问题的最佳方法,绝对不建议用于生产代码。但是,如果查询字符串中没有占位符,则可以使用此方法。 代码:

List<Integer> data = namedParameterJdbcTemplate.queryForList(query, null, Integer.class);
  • 创建并传递空的MapSqlParameterSource
  • 您的代码中已经有一个名为 customerParametersMapSqlParameterSource。只需在调用queryForList()时传递它即可 代码:

    List<Integer> data = namedParameterJdbcTemplate.queryForList(query, customerParameters, Integer.class);
    

    关于java - 如何查询NamedJdbcTemplate中的单个列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68884237/

    相关文章:

    java - ObservableList 中的结果集

    java - 未包装的连接是否被重用?

    java - SimpleJdbcInsert 无法定位表 'user_models' 的列,因此无法生成插入语句

    JavaBuilder 处理 CoreException

    java - 为什么这个使用 Hibernate `Set` 字段的示例没有在数据库表中声明外键?

    java - ojdbc8 jar 未加载到 Tomcat8 中

    spring - spring boot 测试中的事务未回滚

    java - java mongodb API 中的查询

    java - 在 ExceptionMapper 中注入(inject)单例

    java - 是否可以为接口(interface)类型创建对象