当前位置: 首页 > 知识库问答 >
问题:

如何在db语句和结果集[重复]中使用try/cat

江阳羽
2023-03-14
public SortedMap<String, TreeMap<String, String>> getCampo(String city, String sport, String 
    data) throws SQLException {
    TreeMap<String, TreeMap<String, String>> campoInfo = new TreeMap<>();
    
    
    Connection connection =null;
    Statement statement = null;
    ResultSet resultSet = null;
    
    try {
     connection = getConnection();
     statement = connection.createStatement();
    String query = String.format("SELECT * FROM CAMPO WHERE COMUNE='%s' AND SPORT='%s' AND DATA >= '%s' AND TORNEO = 0", city, sport, data);
     resultSet = statement.executeQuery(query);
    while (resultSet.next()) {
        String name = resultSet.getString("NOME");
        String id = "" + resultSet.getInt("ID");
        String comune = resultSet.getString("COMUNE");
        String indirizzo = resultSet.getString("INDIRIZZO");
        String desc = resultSet.getString("DESCRIZIONE");
        String renter = "" + resultSet.getInt("RENTER");
        String date = resultSet.getString("DATA");
        String ora = resultSet.getString("ORA");
        String metodo = resultSet.getString("METODODIPAGAMENTO");
        String prezzo = resultSet.getString("PREZZO");
        String isAffittabile = "" + resultSet.getString("AFFITTABILE");
        TreeMap<String, String> info = new TreeMap<>();
        info.put("ID", id);
        info.put("COMUNE", comune);
        info.put("INDIRIZZO", indirizzo);
        info.put("DESC", desc);
        info.put("RENTER", renter);
        info.put("DATA", date);
        info.put("ORA", ora);
        info.put("PREZZO", prezzo);
        info.put("METODODIPAGAMENTO", metodo);
        info.put("AFFITTABILE", isAffittabile);
        campoInfo.put(name, info);

    }
    
    
}
    catch (Exception e) {
        // TODO: handle exception
    }
   finally {
    if (resultSet!=null) {
        resultSet.close();
    }
    if (statement!=null) {
        statement.close();
    }
   }
    if (connection!=null){
       connection.close();}
    return campoInfo;
   }

我正在用Java编写这个函数,使用Sonar scanner。我对变量“statement”和“resultSet”有问题,因为当我试图在finally块中关闭它们时,Sonar告诉我有一个bug,请使用try with resources或在finally块中关闭它。这只发生在这些变量中的一个,块中的第二个。例如,首先我关闭“结果集”(这没问题),但第二个没有关闭,Sonar将其高亮显示。我能做什么?

共有1个答案

毛德曜
2023-03-14

可以在try(){}块中初始化多个变量:

public SortedMap<String, TreeMap<String, String>> getCampo(String city, String sport, String data) throws SQLException {
    TreeMap<String, TreeMap<String, String>> campoInfo = new TreeMap<>();

    String query = String.format("SELECT * FROM CAMPO WHERE COMUNE='%s' AND SPORT='%s' AND DATA >= '%s' AND TORNEO = 0", city, sport, data);

    try (Connection connection = getConnection(); 
        Statement statement = connection.createStatement(); 
        ResultSet resultSet = statement.executeQuery(query)) {
        while (resultSet.next()) {
            String name = resultSet.getString("NOME");
            String id = "" + resultSet.getInt("ID");
            String comune = resultSet.getString("COMUNE");
            String indirizzo = resultSet.getString("INDIRIZZO");
            String desc = resultSet.getString("DESCRIZIONE");
            String renter = "" + resultSet.getInt("RENTER");
            String date = resultSet.getString("DATA");
            String ora = resultSet.getString("ORA");
            String metodo = resultSet.getString("METODODIPAGAMENTO");
            String prezzo = resultSet.getString("PREZZO");
            String isAffittabile = "" + resultSet.getString("AFFITTABILE");
            TreeMap<String, String> info = new TreeMap<>();
            info.put("ID", id);
            info.put("COMUNE", comune);
            info.put("INDIRIZZO", indirizzo);
            info.put("DESC", desc);
            info.put("RENTER", renter);
            info.put("DATA", date);
            info.put("ORA", ora);
            info.put("PREZZO", prezzo);
            info.put("METODODIPAGAMENTO", metodo);
            info.put("AFFITTABILE", isAffittabile);
            campoInfo.put(name, info);
        }

    } catch (Exception e) {
        // TODO: handle exception
    }
    return campoInfo;
}

我在这里看到的另一个问题是,您应该真正使用准备好的语句(而不是String.format)来构建查询

 类似资料:
  • 我的程序假设在用户输入整数时向随机数组添加10,随机数组将显示,并在第一个数组下向它们添加10,如果用户不输入int值,则try catch语句将捕捉显示错误消息的错误,因此我要做的是在try catch语句中添加一个循环,使用户在不输入int值时输入int值,这是我到目前为止尝试过的,但没有成功

  • 我在一个名为Teacher used return语句的类中声明了一个方法, 然后我构建了构造函数,然后从主类调用它 然而,在cmd windows和intellij中,都没有结果。 但如果我将方法类型更改为void并使用system。出来普林顿,一切都很好。 这里有什么问题?

  • 我想做一个程序,要求你输入一些数据作为一个字符串,然后如果字符串超过6个字符长,它会要求你再做一次,直到你输入一个少于6个字符的答案,然后继续下一个问题,我怎么做?

  • 但我得到一个错误说 所以我尝试使用另一个变量的这是但是我仍然收到相同的错误消息 我如何解决这个问题?或者有什么其他方法我可以用来做这件事? 我在这里使用的两个表在字段User_Name和Transaction_Date上具有相同的值,如所示

  • 我在类中使用下面的代码,允许用户设置声明的的第一点、第二点或第三点。 编译器告诉我: 但是我认为catch语句的目的是能够捕获错误并返回描述错误的字符串,而不必担心匹配函数的返回类型。

  • 创建表(int(10)不为空AUTO_INCREMENT,int(30),varchar(30),varchar(4)不为空,int(2)不为空,主键()); 创建表(varchar(10),主键()); 创建表(int(10),int(30),varchar(30),varchar(4),int(2), varchar(10), varchar(2)not null默认'p'); 分隔符$$ 为