You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java 1.8连接Oracle 12c时ResultSet为空但表中有数据的问题

问题分析与解决方案

嘿,我一眼就瞅见你代码里的核心问题了!你现在获取ResultSet的方式错啦,这就是为什么明明表中有数据,却进不了while循环的原因。

核心错误修正

你用了stmt.getResultSet(),但这个方法是在调用stmt.execute()这类通用执行方法之后,才用来获取结果集的。而对于查询语句,正确的做法是直接用stmt.executeQuery(query)来返回结果集。

修正后的完整代码如下:

Class.forName("oracle.jdbc.driver.OracleDriver");
con = DriverManager.getConnection("jdbc:oracle:thin:@" + ipAddress + ":1521:" + dbname, userName, password);
Statement stmt = con.createStatement();
String query = "select * from table_name";
// 这里改成executeQuery来获取结果集
ResultSet rs = stmt.executeQuery(query); 
while (rs.next()) {
    System.out.println(rs.getString(1));
}
// 记得最后要关闭资源哦,避免内存泄漏
rs.close();
stmt.close();
con.close();

额外排查点(如果修正后还是不行的话)

  • 确认连接的数据库实例是否正确:检查ipAddress、dbname是不是对应到了有数据的那个库,有时候可能连到了测试环境或者其他空实例。
  • 验证用户权限:用你的userName在PL/SQL Developer或者SQL*Plus里执行同样的select * from table_name,看看能不能查到数据,确保当前用户有该表的查询权限。
  • 表名大小写问题:Oracle默认会把表名转成大写,但如果你的表是用双引号创建的小写表(比如create table "table_name" (...)),那SQL语句里必须用双引号括起来,写成select * from "table_name"。
  • 检查结果集是否为空:可以在while循环前加一段代码验证:
    rs.last();
    System.out.println("总记录数:" + rs.getRow());
    rs.beforeFirst(); // 回到结果集开头,不然while循环会从最后一行开始
    

内容的提问来源于stack exchange,提问作者ksnagendran26

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:24:01