NamedParameterJdbcTemplate 查询方法返回错误的整数值
NamedParameterJdbcTemplate query method returning wrong integer value
我正在 运行使用 java 中的 NamedParameterJdbcTemplate 进行简单的 mysql 查询。
问题是我的 java 查询返回 count 字段的二进制值,即 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 class 是:
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&useSSL=false&autoReconnect=true&useUnicode=yes&characterEncoding=UTF8&characterSetResults=UTF8
我完全不知道为什么会这样。如果有人能阐明这一点,那就太好了。
谢谢
我认为您不能那样使用参数 :fieldName
。
尝试像使用 tablename
一样使用串联构建 sql 查询
"SELECT COUNT(DISTINCT " + fieldName + ") count, user_id userId
FROM "+ tableName + " WHERE user_id IN (:userIdList) GROUP BY userId
希望对您有所帮助
我正在 运行使用 java 中的 NamedParameterJdbcTemplate 进行简单的 mysql 查询。
问题是我的 java 查询返回 count 字段的二进制值,即 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 class 是:
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&useSSL=false&autoReconnect=true&useUnicode=yes&characterEncoding=UTF8&characterSetResults=UTF8
我完全不知道为什么会这样。如果有人能阐明这一点,那就太好了。
谢谢
我认为您不能那样使用参数 :fieldName
。
尝试像使用 tablename
"SELECT COUNT(DISTINCT " + fieldName + ") count, user_id userId
FROM "+ tableName + " WHERE user_id IN (:userIdList) GROUP BY userId
希望对您有所帮助