筛选与排序数据

在 Java 中查询 PostgreSQL 数据库

Miller Trujillo

Staff Software Engineer

为何要筛选与排序?

  • 大多数应用不会显示所有记录
  • 需要缩小结果范围
  • 以有意义的方式组织数据
  • 分页展示,便于浏览

$$

$$

$$

$$

  • WHEREORDER BYLIMITOFFSET

一家线上书店

在 Java 中查询 PostgreSQL 数据库

使用 WHERE 筛选

String sql = "SELECT * FROM books WHERE publication_year > ?";
PreparedStatement pstmt = conn.prepareStatement(sql);

pstmt.setInt(1, 2000); ResultSet rs = pstmt.executeQuery();
  • 使用 ? 占位符并用 setInt() 绑定
  • Java 代码不变,仅修改 SQL
在 Java 中查询 PostgreSQL 数据库

能否改在 Java 中筛选?

  • 在数据库侧筛选:
    • 减少传输数据量 ✅
    • 避免网络拥塞 ✅
    • 提升性能 ✅
  • 例外:复杂逻辑(外部 API、AI 模型)💡

点餐类比

在 Java 中查询 PostgreSQL 数据库

使用 ORDER BY 排序

String sql = "SELECT title, publication_year FROM books
WHERE category_id = ? ORDER BY publication_year DESC";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, 3);
ResultSet rs = pstmt.executeQuery();
// Adding dynamic behavior
boolean desc = true;
String sql = "SELECT title, publication_year FROM books
WHERE category_id = ? ORDER BY publication_year ";

sql += desc ? "DESC" : "ASC";
  • += 将文本追加到 SQL 字符串
  • ?: 三元运算符(精简的 if-else)
在 Java 中查询 PostgreSQL 数据库

使用 LIMIT 与 OFFSET 分页

  • LIMIT 控制返回的行数
  • OFFSET 在返回前跳过若干行
  • ORDER BY 确保分页结果一致
String sql = "SELECT title FROM books ORDER BY title ASC LIMIT ? OFFSET ?";
PreparedStatement pstmt = conn.prepareStatement(sql);

pstmt.setInt(1, 10); // LIMIT: 每页 10 本 pstmt.setInt(2, 20); // OFFSET: 跳过前 20 行 ResultSet rs = pstmt.executeQuery();
在 Java 中查询 PostgreSQL 数据库

Passons à la pratique !

在 Java 中查询 PostgreSQL 数据库

Preparing Video For Download...