Javaで手動でページネーションクエリを実行する方法を教えてください。
Javaで手動でページングクエリを実行するには、SQLステートメントのLIMIT句とOFFSET句を使用してJavaコードと組み合わせて実行できます。
LIMIT句は照会結果で返すレコード数を制限し、 OFFSET句は照会結果のオフセットを指定するために使われる。 照会文でLIMITとOFFSETの値を指定することで、ページング照会を行うことができる。
例えば、2ページ目を取得し、1ページあたり10件のレコードを表示する場合、以下のSQL文を使用できます。
SELECT * FROM table_name LIMIT 10 OFFSET 10;
Javaコードでは、ページ番号や1ページあたりのレコード数などのパラメーターを渡すことで動的に検索ステートメントを生成できます。また、検索結果をもとに総ページ数と現在のページの開始レコード位置を計算する必要があります。
サンプルコードを示します。
public List<Record> getPage(int pageNum, int pageSize) {
// 计算起始记录位置
int offset = (pageNum - 1) * pageSize;
// 生成查询语句
String sql = "SELECT * FROM table_name LIMIT ? OFFSET ?";
// 执行查询,并返回结果集
try (PreparedStatement stmt = connection.prepareStatement(sql)) {
stmt.setInt(1, pageSize);
stmt.setInt(2, offset);
ResultSet rs = stmt.executeQuery();
// 处理结果集,将查询结果转换为对象列表
List<Record> records = new ArrayList<>();
while (rs.next()) {
// 将查询结果转换为对象,并添加到列表中
Record record = new Record();
// 设置对象属性值
records.add(record);
}
return records;
} catch (SQLException e) {
// 异常处理
}
return null;
}
public int getPageCount(int pageSize) {
// 生成查询总记录数的语句
String sql = "SELECT COUNT(*) FROM table_name";
// 执行查询,并返回总记录数
try (Statement stmt = connection.createStatement()) {
ResultSet rs = stmt.executeQuery(sql);
if (rs.next()) {
int totalCount = rs.getInt(1);
// 计算总页数
int pageCount = (totalCount + pageSize - 1) / pageSize;
return pageCount;
}
} catch (SQLException e) {
// 异常处理
}
return 0;
}
getPageメソッドで指定したページ番号のデータリストを取得でき、getPageCountメソッドで総ページ数を取得できます。これらの2つのメソッドを呼び出すことで、手動ページングクエリ機能を実現できます。