gpt4 book ai didi

scala - 如何将 1000 条记录批量插入数据库?

转载 作者:行者123 更新时间:2023-12-05 00:25:24 25 4
gpt4 key购买 nike

我正在读取一个巨大的文件并使用 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

如果您确实需要批量处理,则可以使用 grouped 对元素进行分组,并对其进行迭代,在每次迭代时将数据添加到表查询中。像这样的东西:
// 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 多行,我必须从每一行中提取数据并创建几个对象,每个对象都将插入到不同的表中。请注意,我不需要批量进行,而且速度非常快。

关于scala - 如何将 1000 条记录批量插入数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24488330/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com