代码之家  ›  专栏  ›  技术社区  ›  eytnihca

NamedParameterJdbcTemplate查询方法返回错误的整数值

  •  1
  • eytnihca  · 技术社区  · 7 年前

    我在java中使用NamedParameterJdbcTemplate运行一个简单的mysql查询。

    问题是,我的java查询返回 计数 字段,即 1表示所有非零值 0表示所有零值 . 当我运行jdbc发送给mysql的同一个查询时,我直接在mysql服务器上得到了正确的答案。

    详情如下:

    以下是查询:

    SELECT CAST(COUNT(DISTINCT :fieldName) AS UNSIGNED) count, user_id userId FROM "+ tableName + " WHERE user_id IN (:userIdList) GROUP BY userId
    

    执行查询的java LOC:

    NamedParameterJdbcTemplate namedJdbcTemplate = new   NamedParameterJdbcTemplate(getJdbcTemplate().getDataSource());
    
        List<CountRow> countRows = namedJdbcTemplate.query(query,parameters,new CountRowMapper());
    

    countRow类是:

    public class CountRow {
    private int count;
    private String userId;
    
    public CountRow() {
        super();
        // TODO Auto-generated constructor stub
    }
    
    public void setUserId(String userId) {
        this.userId = userId;
    }
    public void setCount(int count) {
        this.count = count;
    }
    
    public int getCount() {
        return count;
    }
    
    public String getUserId() {
        return userId;
    }
    

    }

    我正在查询的列的详细信息:

      `user_id` varchar(30) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL DEFAULT '',
      `fieldName` varchar(15) DEFAULT NULL,
    ENGINE=MyISAM DEFAULT CHARSET=latin1
    

    最后,我的jdbc连接url是:

    jdbc:mysql://127.0.0.1/mydb?zeroDateTimeBehavior=convertToNull&amp;useSSL=false&amp;autoReconnect=true&amp;useUnicode=yes&amp;characterEncoding=UTF8&amp;characterSetResults=UTF8
    

    我完全不知道为什么会这样。如果有人能解释一下这件事,那真是太好了。

    谢谢

    1 回复  |  直到 7 年前
        1
  •  0
  •   gtosto    7 年前

    我认为你不能使用这个参数 :fieldName 以这种方式。 尝试使用连接来构建sql查询,就像使用 tablename

    "SELECT COUNT(DISTINCT " + fieldName + ") count, user_id userId 
    FROM "+ tableName + " WHERE user_id IN (:userIdList) GROUP BY userId
    

    希望这有帮助