【问题标题】:Use try-with-resources or close this "Statement" in a "finally" clause [duplicate]在“finally”子句中使用 try-with-resources 或关闭此“语句”[重复]
【发布时间】:2021-02-14 12:43:41
【问题描述】:

我正在使用 sonarqube 来分析代码以检查其中的一些问题。正如标题所说,该工具给我的建议之一是,“使用 try-with-resources 或在“finally”子句中关闭此“语句””。我不知道它指的是什么,即使在检查了一些笔记之后。这段代码是这样的:

try {
    sentencia = conexion.createStatement();
    sentencia.executeUpdate(consulta);
    dispose();
} catch (SQLException e1) {
    JOptionPane.showMessageDialog(this, "No se puede insertar la cita", "Error", JOptionPane.ERROR_MESSAGE);
    LOGGER.log(Level.SEVERE,"Excepcion provocada",e1);
}

我该如何解决这个问题,以便按照 Sonarqube 的建议进行表达?

【问题讨论】:

  • 您没有在 Statement 对象 sentencia 上调用 close()。一种方法是使用资源尝试。或者你可以自己调用它
  • 您创建了一个语句,完成后需要关闭它。
  • 顺便说一句:sentencia 未在此块中声明这一事实可能表明您的变量或字段范围太广。
  • 请搜索“java try-with-resources”。这会在尝试后自动关闭资源。您也可以使用 finally 子句“java try catch finally”。

标签: java sonarqube


【解决方案1】:

这样的事情应该会有所帮助!

void test(){
        Statement sentencia;
        Connection conexion;

        try {
            sentencia = conexion.createStatement();
            sentencia.executeUpdate(consulta);
            dispose();
        } catch (SQLException e1) {
            JOptionPane.showMessageDialog(this, "No se puede insertar la cita", "Error", JOptionPane.ERROR_MESSAGE);
            LOGGER.log(Level.SEVERE,"Excepcion provocada",e1);
        } finally {
            if(null != sentencia){
                sentencia.close();
            }
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 1970-01-01
    • 2019-03-31
    • 2021-12-14
    • 2020-05-13
    • 2019-07-08
    相关资源
    最近更新 更多