scala – 如何将一批1000条记录插入db?
发布时间:2020-12-16 10:04:46  所属栏目:安全  来源:网络整理 
            导读:我正在读取一个巨大的文件,并使用预编译语句的statement.executeBatch()在 mysql中插入记录.以下是代码: for(int i = 0; i file.length; i++) { count += 1 statement.setString(1,record.id) statement.setString(2,record.date) statement.setString(3,re
                
                
                
            | 
 我正在读取一个巨大的文件,并使用预编译语句的statement.executeBatch()在 
 mysql中插入记录.以下是代码: 
  
  
  for(int i = 0; i < file.length; i++) {
      count += 1
      statement.setString(1,record.id)
      statement.setString(2,record.date)
      statement.setString(3,record.msg)
      statement.addBatch()
      if (count % 1000 == 0) 
          statement.executeBatch()
}
statement.executeBatch()Slick如何帮助(也许模仿上面的代码)? 解决方法
 使用Slick 2.0.2 
  
  一旦你有一个建模数据的案例类,你的Table类和你定义的TableQuery对象,只需将文件读入Seq,然后使用=函数将其添加到TableQuery对象. case class MyDataClass(id: String,date: String,msg: String)
class MyData(tag: Tag) extends Table[MyDataClass](tag,"mydatatableInDB") {
   def id = column[String]("id")
   def date = column[String]("date")
   def msg = column[String]("msg")
   def * = (id,date,msg) <> (MyDataClass.tupled)(MyDataClass.unapply)
}
val myDataTableQuery = TableQuery[MyData]
// read your data into a Seq[MyDataClass] (for example) and...
myDataTableQuery ++= listWithData如果您真的需要使用批处理,可以使用分组对元素进行分组,并对它们进行迭代,在每次迭代时将数据添加到表查询中.像这样的东西: // With your data already in a Seq
def insertIntoTableQuery(data: List[MyDataClass) = {
    myDataTableQuery ++= data
}
// make groups of 1000 and iterate    
listWithData.grouped(1000) foreach insertInToTableQuery除非我遗漏了什么,否则我认为文档中已经涵盖了这一点: Slick 2.0.2 Documentation 几周前我有类似的任务.我正在使用的文件有350,000行,每行我必须提取数据并创建几个对象,每个对象都要插入另一个表中.请注意,我不需要批量执行,而且速度非常快. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! | 
