用statement执行静态sql查询需三步:获取statement对象→调用executequery()得resultset→用next()遍历并getxxx()取值;statement须从connection创建,仅支持无参固定sql;resultset游标初始在首行前,须先next()再取值;列名区分大小写,序号从1起;资源须按resultset→statement→connection顺序关闭。

用 Statement 执行静态 SQL 查询,核心是三步:获取 Statement 对象 → 执行 executeQuery() 得到 ResultSet → 用 next() 遍历 + getXXX() 取值。
创建 Statement 并执行查询语句
Statement 必须从已建立的 Connection 对象中创建,它只适用于不带参数的固定 SQL(比如写死的表名、字段、条件)。调用 executeQuery(String sql) 后,数据库返回一个 ResultSet 对象,代表查询结果的逻辑表格。
- SQL 字符串必须是合法的 SELECT 语句,不能是 INSERT/UPDATE/DELETE
- Connection 未关闭前才能创建 Statement;连接失效时会抛出 SQLException
- 示例:
String sql = "SELECT id, name, email FROM users WHERE status = 'active'";
遍历 ResultSet 获取每一行数据
ResultSet 内部维护一个游标,默认指向第一行之前。必须先调用 next() 将游标移到第一行,才可读取数据;每次调用 next() 都会向下移动一行,返回 true 表示还有数据,false 表示已到末尾。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 不要跳过 next() 直接调用 getXXX(),否则会报 SQLException(“Before start of result set”)
- 推荐用 while 循环:
while (rs.next()) { ... } - 游标不可逆,不能回退;如需多次遍历,应重新执行查询或缓存数据
从当前行提取字段值
在 next() 返回 true 的前提下,可用列名或列序号配合 getXXX() 方法取值。列名区分大小写(取决于数据库配置),列序号从 1 开始(不是 0)。
- 常用方法:
rs.getString("name")、rs.getInt(1)、rs.getDate("create_time") - 如果某列为 NULL,对应 getXXX() 通常返回 null(基本类型如 int 会抛异常,建议用
wasNull()判断) - 列名拼写错误或类型不匹配会直接抛出 SQLException,开发阶段注意核对表结构
记得及时释放资源
ResultSet、Statement、Connection 都占用数据库连接和内存,用完必须显式 close()。推荐使用 try-with-resources 自动管理,避免遗漏。
- 关闭顺序:ResultSet → Statement → Connection(反向释放更安全)
- 即使发生异常,也要在 finally 或 try-with-resources 中关闭,否则可能引发连接泄漏
- 示例结构:
try (Connection conn = ...; Statement stmt = ...; ResultSet rs = ...) { ... }
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










