Java分页查询的代码实现

在Java开发中,分页查询是一种常见的功能,用于在数据量较大的情况下,只显示用户需要查看的部分数据,以下是一个简单的Java分页查询的实现方法,我们将使用JDBC进行数据库连接和查询。
准备工作
确保你的项目中已经包含了数据库驱动和JDBC连接池(如HikariCP或c3p0)。
连接数据库
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DatabaseUtil {
private static final String URL = "jdbc:mysql://localhost:3306/your_database";
private static final String USER = "your_username";
private static final String PASSWORD = "your_password";
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(URL, USER, PASSWORD);
}
}
定义分页参数
在执行分页查询之前,需要定义分页参数,包括当前页码、每页显示的记录数等。

public class Pagination {
private int currentPage;
private int pageSize;
private int totalRecords;
public Pagination(int currentPage, int pageSize) {
this.currentPage = currentPage;
this.pageSize = pageSize;
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getTotalRecords() {
return totalRecords;
}
public void setTotalRecords(int totalRecords) {
this.totalRecords = totalRecords;
}
}
计算总记录数
在执行分页查询之前,需要知道总记录数,以便计算总页数。
public class RecordCountUtil {
public static int getTotalRecords(Connection conn, String query) throws SQLException {
try (PreparedStatement stmt = conn.prepareStatement(query)) {
ResultSet rs = stmt.executeQuery();
int count = 0;
while (rs.next()) {
count++;
}
return count;
}
}
}
执行分页查询
以下是一个简单的分页查询方法,使用LIMIT和OFFSET语句来实现。
public class PaginationQuery {
public static List<Map<String, Object>> executePaginationQuery(Connection conn, String selectQuery, String whereQuery, Pagination pagination) throws SQLException {
List<Map<String, Object>> results = new ArrayList<>();
int offset = (pagination.getCurrentPage() - 1) * pagination.getPageSize();
String query = selectQuery + " " + whereQuery + " LIMIT " + pagination.getPageSize() + " OFFSET " + offset;
try (PreparedStatement stmt = conn.prepareStatement(query)) {
ResultSet rs = stmt.executeQuery();
ResultSetMetaData metaData = rs.getMetaData();
while (rs.next()) {
Map<String, Object> row = new HashMap<>();
for (int i = 1; i <= metaData.getColumnCount(); i++) {
row.put(metaData.getColumnName(i), rs.getObject(i));
}
results.add(row);
}
}
return results;
}
}
使用分页查询
你可以使用PaginationQuery类来执行分页查询。

public class Main {
public static void main(String[] args) {
try (Connection conn = DatabaseUtil.getConnection()) {
Pagination pagination = new Pagination(1, 10);
List<Map<String, Object>> results = PaginationQuery.executePaginationQuery(conn, "SELECT * FROM your_table", "WHERE some_column = 'some_value'", pagination);
for (Map<String, Object> row : results) {
System.out.println(row);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
就是一个简单的Java分页查询的实现过程,在实际应用中,你可能需要根据具体需求调整查询逻辑和分页参数。