1

MySQL データベースにエントリを挿入する Scala 関数があります。正常に挿入されたエントリの数を数えて、それを呼び出し元に返したいと思います。基本的には、次のようになります。

def putInDB(lstItems: List[String]): Int = {
  Class.forName("com.mysql.jdbc.Driver")
  val dbConn = DriverManager.getConnection("jdbc:mysql://localhost/somedb?" "user=someuser&password=somepass")
  val stmt = dbConn.createStatement
  var insertCount = 0 //Not sure if this is the right way
  lstItems.foreach { l =>
    val res = stmt.executeUpdate("insert ignore into mytable ... ")
    if (res > 0) insertCount = insertCount + 1  // Nor this
  }
  insertCount
}

var insertCountループ内の変数を更新する方法が正しいかどうかはわかりません。私の関数型プログラミングのスキルは少し錆びています。「機能的な」スタイルでカウントを維持する正しい方法は何ですか? つまり、不変変数を使用しif、私が使用した種類のステートメントを避けます。

4

2 に答える 2

2

これを試してください (executeUpdate が常に 0 または 1 を返すと仮定します):

lstItems.map(stmt.executeUpdate).sum

実際には、より良いでしょう:

lstItems.map(stmt.executeUpdate).count(_ > 0)
于 2013-09-17T13:21:27.123 に答える
1

私は言うだろう:

val count =  lstItems.foldLeft(0) { (sum, item) => 
    val res = stmt.executeUpdate("insert ignore into mytable ... ")
    if (res > 0 ) sum + 1
    else sum
  }
于 2013-09-17T13:23:23.003 に答える