Java连接Oracle查询两张表返回“未找到结果”问题排查
问题:SQL Developer执行查询正常,Java代码执行返回“Results not found”
在SQL Developer中执行同一查询语句可正常获取结果,但在Java代码中执行时却返回“Results not found”,我编写的Java代码如下:
Connection connection = null; try { String sql1="SELECT u.FIRSTNAME, u.MOBILE, ca.STREET_ADDRESS, ca.CITY, ca.POSTAL_CODE " + "FROM USERS u " + "JOIN ADDRESSES ca ON u.ID = ca.CUSTOMER_ID " + "WHERE u.id = ?"; try { PreparedStatement preparedStatement = connection.prepareStatement(sql1); preparedStatement.setInt(1,Id); //preparedStatement.setString(2, pswd); ResultSet resultSet = preparedStatement.executeQuery(); if(resultSet.next()) { String userId = resultSet.getString("MOBILE"); String un= resultSet.getString("FIRSTNAME"); String ad=resultSet.getString("STREET_ADDRESS"); System.out.println(ad); System.out.println(un); System.out.println("User ID: " + userId); } else { System.out.println("Results not found"); # resultSet.close(); preparedStatement.close();
排查与解决方法
- 确保数据库连接已正确建立:代码中
connection初始化为null,但缺少获取连接的逻辑(比如DriverManager.getConnection()或数据源获取),没有有效连接的话查询根本无法执行,先补充连接获取代码并验证连接成功。 - 核对参数
Id的取值:打印Id的值,确认它和你在SQL Developer中测试时使用的ID完全一致,同时检查数据库中USERS表的ID字段类型是否和setInt匹配(比如如果是字符串类型,要改用setString)。 - 修复代码语法错误:
- 去掉
resultSet.close();前的#注释符号,改用Java标准注释// - 补全未闭合的
try、else代码块,否则会导致执行逻辑异常
- 去掉
- 添加异常捕获:在代码中加入
SQLException捕获逻辑,打印异常堆栈信息,排查是否有隐藏的错误(比如参数绑定失败、权限问题等)。 - 验证表和字段名一致性:确认数据库中表名(
USERS、ADDRESSES)和字段名(ID、CUSTOMER_ID等)的大小写、拼写和代码完全一致,部分数据库对大小写敏感。
修正后的示例代码
Connection connection = null; try { // 补充获取数据库连接的代码 connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL", "你的用户名", "你的密码"); String sql1 = "SELECT u.FIRSTNAME, u.MOBILE, ca.STREET_ADDRESS, ca.CITY, ca.POSTAL_CODE " + "FROM USERS u " + "JOIN ADDRESSES ca ON u.ID = ca.CUSTOMER_ID " + "WHERE u.id = ?"; // 使用try-with-resources自动关闭资源 try (PreparedStatement preparedStatement = connection.prepareStatement(sql1)) { preparedStatement.setInt(1, Id); // 打印传入的ID,确认参数正确性 System.out.println("当前查询的ID:" + Id); try (ResultSet resultSet = preparedStatement.executeQuery()) { if (resultSet.next()) { String userId = resultSet.getString("MOBILE"); String un = resultSet.getString("FIRSTNAME"); String ad = resultSet.getString("STREET_ADDRESS"); System.out.println(ad); System.out.println(un); System.out.println("User ID: " + userId); } else { System.out.println("Results not found"); } } } catch (SQLException e) { e.printStackTrace(); } } catch (SQLException e) { e.printStackTrace(); } finally { // 关闭数据库连接 if (connection != null) { try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } }
内容的提问来源于stack exchange,提问作者AMIT PATEL
相关产品推荐
相关产品推荐

