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

Java 7中try-with-resources使用时PreparedStatement参数设置位置如何调整

问题原因

  • try-with-resources 括号内的资源初始化语句会按书写顺序同步执行,你在初始化PreparedStatement后直接调用了executeQuery()执行查询,此时还没给SQL的占位符设置参数,所以查询直接报错。
  • 你代码里初始化的Statement没有被使用,属于冗余代码,可以直接删除。

修正方案

将ResultSet的初始化逻辑移到try代码块内部,完成参数设置后再执行查询获取结果集,Java 7及以上版本支持嵌套的try-with-resources结构,内层的ResultSet同样会被自动关闭,完全满足SonarQube的资源自动回收要求,修改后的代码如下:

try (Connection connection = DriverManager.getConnection(connectionUrl);
     PreparedStatement sentence = connection.prepareStatement(selectSql)) {
    
    // 先给PreparedStatement设置参数
    sentence.setString(1, parametro);
    // 再执行查询获取结果集
    try (ResultSet resultSet = sentence.executeQuery()) {
        logger.info(resultSet + " resultSet!----------------------------------------");

        // 打印结果集内容
        while (resultSet.next()) {
            logger.info(" Entro al While!----------------------------------------");
            euroList.add(new EuroModel(resultSet.getInt("ID"), resultSet.getString("RFC"),
                    resultSet.getString("NOM")));
            logger.info("recibiendo result-> " + resultSet.getString(2) + " " + resultSet.getString(3));
            logger.info(euroList.toString());
        }
    }

} catch (SQLException e) {
    logger.info("No se pudo conectar");
    logger.info("EuroService");
    logger.info("INFO: " + e);
    // 建议返回空集合而非null,避免调用方出现空指针异常
    return Collections.emptyList();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 18:15:04