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

时间:2017-11-24 10:55:06

标签: java mysql jdbc jdbctemplate sqlparameters

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

问题是我的java查询返回 count 字段的二进制值,即 1表示所有非零值 0表示所有零值< / strong>即可。当我运行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连接网址是:

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 个答案:

答案 0 :(得分:0)

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

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

希望这有帮助