计算成功更新的数量

时间:2013-09-17 13:16:37

标签: scala

我有一个Scala函数,可以在MySQL数据库中插入一个条目。我想保留成功插入的条目数并将其返回给调用者。基本上,它看起来像这样:

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语句。

2 个答案:

答案 0 :(得分:2)

试试这个(假设executeUpdate总是返回0或1):

lstItems.map(stmt.executeUpdate).sum

实际上,更好的是:

lstItems.map(stmt.executeUpdate).count(_ > 0)

答案 1 :(得分:1)

我会说:

val count =  lstItems.foldLeft(0) { (sum, item) => 
    val res = stmt.executeUpdate("insert ignore into mytable ... ")
    if (res > 0 ) sum + 1
    else sum
  }