【问题标题】:How do I return the contents of a ResultSet as a map?如何将 ResultSet 的内容作为地图返回?
【发布时间】:2016-09-06 08:56:16
【问题描述】:

我想知道如何将查询的结果集作为地图返回。 这是我的查询,其中“nameCodesString”是字符串列表,例如('raul', 'peter', 'shawn'):

try (PreparedStatement stmt = conn.prepareStatement("select n.CODE, l.VALUE"
                                + " from TNAME n join TPROPERTIES l on n.UIDPK = l.OBJECT_UID"
                                + " where n.CODE IN (" + nameCodesString + ")")) {
    try (ResultSet rs = stmt.executeQuery()) {
        while (rs.next()) {
            log.info("rs {}",rs);
            nameCode = rs.getString(1);
            displayName = rs.getString(2);
            Person.add(new PersonDTO(nameCode, displayName, ""));
        }
    }
}

结果应该是一个代码和一个值。我不确定如何在与数据库的一个连接中完成所有这些操作。

【问题讨论】:

  • 你所做的与准备好的语句无关
  • 显示'nameCodesString'的值
  • 类似于:('raul', 'peter', 'shawn')。第二个表包含 displayName。
  • 显然,您的实际问题是如何将两列ResultSet 转换为Map。然后,您的问题和标题中的其他所有内容都已过时且令人分心。源是PreparedStatement(以某种方式抵消其目的)的事实,以及您将IN 运算符与字符串列表一起使用的事实都与ResultSet 的处理无关。跨度>

标签: java sql oracle java-8


【解决方案1】:

你好,这是我的建议

 String req="select n.CODE, l.VALUE from TNAME n join"
 +" TPROPERTIES l on n.UIDPK      = l.OBJECT_UID "
 +" where n.CODE IN ?";
 PreparedStatement stmt=null;
 ResultSet rs=null;

 try{
     stmt=conn.prepareStatement(req);
     stmt.setString(1, nameCodesString);
     rs=stmt.executeQuery();
     while(rs.next()){
       nameCode = rs.getString(1);
       displayName = rs.getString(2);
       Person.add(new PersonDTO(nameCode, displayName, ""));
     }
  }
  catch(SQLException ex){
     System.out.println(ex);
  }
  finally{
     if(rs!=null){
           try{
               rs.close();
           }
           catch(SQLException ex){}
       }
      if(stmt!=null){
           try{
               stmt.close();
           }
           catch(SQLException ex){}
      }
     if(conn!=null){
         try{
              conn.close();
         }
         catch(SQLException ex){}
     }
  }

这只是我的建议,希望对您有所帮助! 最好的问候...

【讨论】:

  • 我强烈推荐了解The try-with-resources Statement...
  • 这里的地图在哪里?
  • 我以为那个人是地图,另一方面我要求他显示该类的所有代码。谢谢
【解决方案2】:

我不明白应该如何使用preparedStatements。最后我决定不使用它们并坚持执行查询字符串:

Map<String, String> personDetails = new Hashmap();
try (Connection conn = dataSource.getConnection();
   Statement stmt = conn.createStatement();
   ResultSet rs = stmt.executeQuery("select n.CODE, l.VALUE"
              + " from TNAME n join TPROPERTIES l on n.UIDPK = l.OBJECT_UID"
              + " where n.CODE IN (" + nameCodesString + ")")) {
       while (rs.next()) {
          nameCode = rs.getString(1);
          displayName = rs.getString(2);
          personDetails.put(nameCode, displayName); 
       }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-05
    • 1970-01-01
    • 2010-09-10
    • 1970-01-01
    • 2019-07-08
    • 2018-03-31
    • 1970-01-01
    • 2023-01-23
    相关资源
    最近更新 更多