Scala 如何将元素添加到不可变数组并返回该映射

Scala 如何将元素添加到不可变数组并返回该映射,scala,jdbc,mutablemap,Scala,Jdbc,Mutablemap,如何将元素添加到映射列表并从此方法返回?我相信您已经意识到我是Scala的新手,代码中有很多问题会导致清晰度问题,但我会尽我所能回答您的问题 def jdbcReader(user: String, pwd: String, url: String, id: Int): List[mutable.Map[String, String] = { var KeyVal = mutable.Map[String, String]() var connection: Connection

如何将元素添加到映射列表并从此方法返回?我相信您已经意识到我是Scala的新手,代码中有很多问题会导致清晰度问题,但我会尽我所能回答您的问题

def jdbcReader(user: String, pwd: String, url: String, id: Int): List[mutable.Map[String, String] = {
   var KeyVal = mutable.Map[String, String]()

   var connection: Connection = null
   try {

      connection = DriverManager.getConnection(url, user, pwd)
      val statement = connection.createStatement()
      val resultSet = statement.executeQuery("SELECT Nam, Value FROM tablename WHERE id=?".replace("?", id.toString))
      while (resultSet.next()) {
         val name = resultSet.getString("Nam")
         val value = resultSet.getString("Value")
         // println("name , value = " + name + ", " + value)
      }

   } catch {
      case e => e.printStackTrace()
         val t = e.getMessage()
   }
}
我们不建议在Scala中使用var。像以前一样,除非你真的,真的必须。因此,我们不需要尝试获取结果并将其添加到地图中,而是使用这些条目构建一个地图

1) 我们获取结果并将其映射到键和值的元组(对)

2) 只需调用.toMap即可将其转换为地图

2.1)您还可以执行groupBy,它基本上按键对所有这些对进行分组,然后调用.map来构造HashMap

注意,我将提出一些对新来者来说可能稍微先进的想法,但我强烈建议您花时间熟悉这些想法,因为它们将在未来对您有很大帮助

如果出于任何原因,您需要在将来更新此地图,您应该考虑在何处构建新的、更新的地图实例,并将其传递到需要进行合成的任何地方。 或者,在绝对必须保持共享状态的情况下,请查看或


此解决方案假定resultSet是一个集合。然而,我不得不说,我发现很难相信数据库操作只是返回。该操作可能应该封装在一个IO中,并返回一个未来,整个操作应该返回一个非此即彼或一次尝试。我们也不喜欢在Scala中抛出异常。我将把这些作为练习留给你们,因为这些建议超出了问题的范围

你能确切地说明你想添加什么到这个列表中吗?空映射?尝试将键值对字符串添加到列表的映射您有一个映射列表,而不是列表的映射。我当然不明白你为什么要返回地图列表。简单的映射在这里就足够了,不是吗?var KeyVal=mutable.Map[String,String]var connection:connection=null试试{val name=resultSet.getString(“Nam”)val value=resultSet.getString(“value”)KeyVal+=(name->value)}}catch{case=>e.printStackTrace()val t=e.getMessage()}}当我添加元素KeyVal+=(name->value)时,它一直抛出类型不匹配
def jdbcReader(user:String,pwd:String, url: String, id:Int): Map[String, String] ={

   try {

      val connection = DriverManager.getConnection(url, user, pwd)
      val statement = connection.createStatement()
      val resultSet = statement.executeQuery(s"SELECT Nam, Value FROM tablename WHERE id=${id.toString}")


      resultSet.map(e => (e.getString("Name"), e.getString("Value")).toMap

       //Or if you want a hashmap
       // resultSet.map(e=>(e.getString("Name"), e.getString("Value")).groupBy(_._1).map { case (k,v) => (k,v.map(_._2))}


   } catch {
     case e : Exception => 
       e.printStackTrace()
       val t = e.getMessage()      
    }
 }