【问题标题】:paging with JDBC JAVA [duplicate]使用 JDBC JAVA 进行分页 [重复]
【发布时间】:2017-05-09 21:13:41
【问题描述】:

我在理解 JDBC java 中的分页时遇到了问题,我希望有人能告诉我一些关于它的事情,我是 java 编程的新手,作为示例不容易理解这些方法的功能setFetchsize() ; getFetchSize();依此类推,我尝试在 Mysql 中创建一个关于用户的表,然后通过使用此语句“SELECT * FROM User”从表中获取所有信息来进行分页,我认为我将获得前 10 行,然后是 10 行,因为它的默认值,我必须从数据库中获取所有信息作为分页,这是我的代码,我尝试将 LIMIT 与它一起使用,但我仍然不明白它是如何工作的。

@Override
public List<User> getAll() throws SQLException {

    try (PreparedStatement statement = connection.getConnection()
            .prepareStatement("SELECT * FROM User")) {

        int fetchSize = statement.getFetchSize();

        System.out.println("Statement fetch size : " + fetchSize);

        statement.setFetchSize(50);

        ResultSet result = statement.executeQuery();
        result.setFetchSize(33);
        while (result.next()) {
            list.add(extractUser(result));

        }

    } catch (SQLException e) {

        throw new RuntimeException(e);
    }
    System.out.println(list);
    return list;

}

private User extractUser(ResultSet result) throws SQLException {

    long id = result.getLong(1);
    String userName = result.getString(2);
    String firstName = result.getString(3);
    String lastName = result.getString(4);
    long teamId = result.getLong(5);
    String userStatus = result.getString(6);

    return new User(id, userName, firstName, lastName, teamId, userStatus);

}

【问题讨论】:

    标签: java mysql jdbc


    【解决方案1】:

    当 JDBC 需要从数据库中获取一条记录时,它会在它周围获取一批记录,以提高性能。这批的大小可以用setFetchSize控制。但是,这对查询结果没有功能影响。无论提取大小如何,您仍然会得到相同的结果。唯一会改变的是程序在每次访问时提取的记录数(因此,它需要执行的提取数)。

    如果您想在您的应用程序中引入分页,您需要自己编写代码,例如带有limit 子句:

    public List<User> getAll(int beginIndex, int pageSize) throws SQLException {
    
        try (PreparedStatement statement = 
                 connection.getConnection().prepareStatement
                 ("SELECT * FROM User ORDER BY Username LIMIT ? OFFSET ?")) {
    
            statement.setInt(1, pageSize);
            statement.setInt(2, begineIndex);
    
            ResultSet result = statement.executeQuery();
            while (result.next()) {
                list.add(extractUser(result));
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
        return list;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-20
      • 1970-01-01
      • 2021-06-28
      • 2017-02-20
      • 2015-07-09
      • 1970-01-01
      • 2012-10-20
      • 1970-01-01
      相关资源
      最近更新 更多