从现有查询创建count()查询

时间:2012-05-10 08:46:31

标签: mysql count jooq

编辑:我使用的是jOOQ版本1.6.8;在较新的版本中,这应该有效(见答案)

我正在使用Jooq为我的java Web应用程序编写一个gridmodel来处理通过分页,排序等方式获取数据...

首先,我使用factory.select(...)创建一个选择,并将此参数(SelectConditionStep)作为参数传递给我的gridmodel,我根据参数添加所需的.limit().orderBy()

但我现在的问题是我还需要知道结果的总数(不只是1页)来计算总页数。所以我的问题是,是否可以通过某种方式从给定的SelectConditionStep创建计数查询。

我想把它作为一个子查询包装在一个count查询中;类似的东西:

(不起作用,只是为了表明这个想法)

factory.select(count()).from(selectConditionStep)...
MySQL中的

我会这样做:

select count(*) from (select ...) as r

我当前的代码:

        private final SelectConditionStep selectStep;
        ...

        @Override
        public int getAvailableRows() {

            JooqSelect select = new JooqSelect() {

                @SuppressWarnings("unchecked")
                protected Result<Record> select(Connection connection) throws SQLException {

                    Factory create = new Factory(connection, dialect);              
                    create.attach(selectStep);

                    /* This does not compile, just to show what I need */               
                    return create.select(count()).from(selectConditionStep).fetch();
                }
            };

            session.doWork(select); 

            /* Get result */
            return select.getResult()...;
        }

1 个答案:

答案 0 :(得分:1)

您的更新示例提到count()未知。事实上这是Factory.count()。您有三种选择:

  • 使用selectCount()代替select(count())。这是一种方便的方法
  • 完全限定Factory.count()功能
  • 静态从Factory导入所有方法:

    import static org.jooq.impl.Factory.*;
    

教程中记录了最后一个选项:

http://www.jooq.org/tutorial.php#step3

在各地的手册中