java中遍历resultset需先调用next()移动游标至首行,再用getstring()、getint()等按列名或索引(从1开始)读值;注意null处理(用wasnull()或getobject()),并用try-with-resources关闭资源。

Java 中通过 ResultSet 遍历 MySQL 查询结果,核心是调用 next() 方法逐行移动游标,并配合 getXXX() 方法读取字段值。
使用 while 循环 + next() 移动游标
ResultSet 的游标初始位于第一行之前,必须先调用 next() 才能访问首行数据。该方法返回 true 表示成功移到下一行,false 表示已到末尾。
- 每次调用
next(),游标向下移动一行 - 循环体中可安全调用
getString("name")、getInt(1)等获取当前行字段 - 不要在循环外或循环开始前直接读取(会抛
SQLException: Before start of result set)
按列名或列索引获取字段值
推荐优先使用列名(更易维护),列索引从 1 开始(不是 0):
-
rs.getString("username")—— 根据字段名获取字符串 -
rs.getInt("age")—— 获取整型,若为NULL返回 0(注意判空) -
rs.getObject("create_time")—— 获取任意类型,适合不确定类型的场景 -
rs.getTimestamp("create_time")—— 对应 MySQL 的DATETIME/TIMESTAMP
安全处理 NULL 值和异常
数据库字段可能为 NULL,直接调用 getXXX() 可能导致逻辑错误(如 getInt() 返回 0 无法区分真实 0 和 NULL):
- 用
wasNull()判断上一次getXXX()是否取到 NULL:Integer age = rs.getInt("age"); if (rs.wasNull()) age = null; - 更简洁方式:统一用
getObject(),再强转并判空:String name = (String) rs.getObject("name"); - 确保
ResultSet、Statement、Connection在finally或 try-with-resources 中关闭
完整示例(含资源自动关闭)
使用 try-with-resources 确保连接、语句、结果集正确释放:
String sql = "SELECT id, username, email FROM users WHERE status = ?";
try (Connection conn = DriverManager.getConnection(url, user, pwd);
PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setString(1, "active");
try (ResultSet rs = ps.executeQuery()) {
while (rs.next()) {
long id = rs.getLong("id");
String name = rs.getString("username");
String email = (String) rs.getObject("email"); // 安全处理 NULL
System.out.printf("ID: %d, Name: %s, Email: %s%n", id, name, email);
}
}
} catch (SQLException e) {
e.printStackTrace();
}Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











