首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL JDBC计算行数失败

MySQL JDBC计算行数失败
EN

Stack Overflow用户
提问于 2016-06-07 07:55:30
回答 1查看 162关注 0票数 0

我让这个select在工作台中运行,但有时会因为jdbc上的相同参数而失败。问题是,有时通过JDBC,'pos‘值返回null。我认为,由于某些原因,@p没有启动,但不知道如何修复。

代码语言:javascript
复制
SELECT t1.wId, t1.twId, t1.name, t1.timeout, t1.pos
FROM (
SELECT w.id AS wId, tw2.id AS twId, w.name AS name, tw2.timeout AS             timeout, @p:=@p+1 AS pos
FROM timeout_workqueue tw1
INNER JOIN timeout_workqueue tw2
ON tw1.workqueue_id = tw2.workqueue_id
INNER JOIN workqueue w
ON tw1.workqueue_id = w.id
WHERE tw1.id = ?
ORDER BY tw2.id) t1, (SELECT @p:=1) c
WHERE t1.twId = ?;

完整的Java代码是:

代码语言:javascript
复制
public TimeoutWorkqueueView getTimeoutWorkqueueView(Integer id) {

    String sql = "SELECT t1.wId, t1.twId, t1.name, t1.timeout, t1.pos"
            + " FROM ("
            + " SELECT w.id AS wId, tw2.id AS twId, w.name AS name, tw2.timeout AS timeout, @p:=@p+1 AS pos"
            + " FROM timeout_workqueue tw1"
            + " INNER JOIN timeout_workqueue tw2"
            + " ON tw1.workqueue_id = tw2.workqueue_id"
            + " INNER JOIN workqueue w"
            + " ON tw1.workqueue_id = w.id"
            + " WHERE tw1.id = ?"
            + " ORDER BY tw2.id) t1, (SELECT @p:=1) c"
            + " WHERE t1.twId = ?";

    return (TimeoutWorkqueueView) getJdbcTemplate().queryForObject(sql, new BeanPropertyRowMapper(TimeoutWorkqueueView.class), id, id);

}
EN

回答 1

Stack Overflow用户

发布于 2016-06-07 08:40:21

好的,所以我在这里看到的问题(请验证)是您认为您一开始就将参数设置为1来运行查询。

但是,如果您设置@p =1 ->,则此@p:=@p+1将不再计算为1。

同样假设您有20行,您运行此查询20次,但在最后一次运行时,它将返回null,因为pos将是21,而这个值并不存在。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37668529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档