gpt4 book ai didi

带有数组的 Scala Slick 批量插入

转载 作者:行者123 更新时间:2023-12-04 18:08:19 30 4
gpt4 key购买 nike

我将一个长字符串拆分为一个字符串数组,然后我想将它们全部插入到数据库中。我可以轻松地遍历数组并一一插入,但似乎效率很低。然后我想有一个insertAll()方法。然而,insertAll()方法定义如下:
def insertAll(values: U*)
这仅接受多个 U,但不接受 ArrayList .

/* Insert a new Tag  */
def insert(insertTags: Array[String])(implicit s: Session) {
var insertSeq: List[Tag] = List()
for(tag <- insertTags) {
insertSeq ++= new Tag(None, tag)
}
Tag.insertAll(insertSeq)

}

* Tag是表对象

这是我编写的初步代码。它不起作用,因为 insertAll()不带 Seq .我希望有一种方法可以做到这一点......所以它不会生成一个数组长度乘以 SQL 插入子句。

最佳答案

当一个函数需要重复的参数如 U* 而你想要传递一个 U 的序列时,它必须被标记为一个序列参数,这是用 : _* 完成的。如

Tag.insertAll(insertSeq: _*)

这在第 6.6 节的规范中进行了描述。它消除了某些情况的歧义,例如;
def f(x: Any*)
f(Seq(1, "a"))

在那里,可以使用单个参数调用 f, Seq(1, "a")或两个, 1"a" .将是前者,后者用 f(Seq(1, "a"): _*) 完成。 Python 有类似的语法。

关于您评论中的问题:
它适用于 Seq、符合 Seq 的集合以及可以隐式转换为 Seq(包括数组)的值。这意味着很多收藏,但不是全部。例如,不允许使用 Set(但它们有一个 toSeq 方法,因此使用 Set 调用仍然很容易)。

它不是一种方法,它更像是一种类型归属。它只是告诉编译器这个参数本身就是完整的预期 Seq,而不是序列参数中的唯一项。

关于带有数组的 Scala Slick 批量插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21494813/

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