как добавить элемент в неизменный массив и вернуть эту карту - PullRequest
0 голосов
/ 05 ноября 2019
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

1 Ответ

0 голосов
/ 05 ноября 2019

В коде много проблем, вызывающих ясность, но я постараюсь ответить на ваш вопрос в меру моего понимания.

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()      
    }
 }

Мы не рекомендуем использовать var в Scala. Как и всегда, если только вам действительно не нужно. Поэтому вместо того, чтобы пытаться получить результаты и добавить их на карту, мы создадим карту с этими записями на ходу.

1) Мы берем результаты и сопоставляем их с кортежем (парой) ключей и значений

2) Просто вызовем .toMap, чтобы превратить его в карту

2.1) Вы также можете создать groupBy, который в основном группирует все эти пары по ключу, а затем вызвать .map для создания HashMap

Примечание. Я предложу несколько идей, которые могут быть немного продвинуты дляновичок, однако я настоятельно рекомендую уделить время ознакомлению с этими идеями, так как они будут вам очень полезны в будущем

Если по какой-либо причине вам необходимо обновить эту Карту в будущемВы должны либо изучить идею композиции функций , где вы должны создать новый, обновленный экземпляр Map и передать его туда, где когда-либо потребуется пройти композицию. Или, в случаях, когда абсолютно необходимо поддерживать общее состояние, просмотрите Монады состояний или cats.effect.Ref

Это решение предполагает, что resultSetКоллекция. Однако я должен сказать, что мне очень трудно поверить, что операция с базой данных просто возвращается. Эта операция, вероятно, должна быть заключена в IO и возвращать будущее, а все это должно возвращать Either или Try. Нам также не нравится создавать исключения в Scala. Я оставлю их вам в качестве упражнения, поскольку эти предложения выходят за рамки вопроса.

...