2017-11-25 153 views
0

我用Slick创建了一个数据库。我试图创建表格模式,选择一些信息等等。这里是我的架构创建代码:优化数据库操作Slick 3

val createUserTable = UserTable.table.schema.create 
val createTaskTable = TaskTable.table.schema.create 
Await.result(db.run(DBIO.seq(Queries.createUserTable, Queries.createTaskTable)), 2 seconds) 

此代码工作得很好,但我不希望使用Await.result每查询。我正在寻找的是至少按照目的(创建,选择等)批量执行它们。我能我创造了这个方法传递不同的操作:

def executeAction[T](action: DBIO[T]) = 
    Await.result(db.run(action), 2 seconds) 

所以我很好奇,我能怎样改变通过持有查询序列的一些数据结构?例如,List(createUserTable, createTaskTable)

您的帮助表示感谢!

+1

请添加您正在使用的浮油版本。光滑2和光滑3差异很大 – pedrorijo91

+0

我编辑了这个问题。我使用Slick 3 – Cassie

回答

2

两种方法可以避免等待每一个DBIO行动

  1. 创建DBIO行动的列表,并使用DBIO.seq聚集他们和执行。

  2. 使用理解将所有DBIO动作组合成一个DBIO动作。

这将帮助您使用一次又一次地等待您的中间DBIO操作的结果。

在这两种情况下,您都必须至少使用Await.result至少一次等待主线程中的结果(即停止主线程退出)。

+0

所以我的行''Await.result(db.run(DBIO.seq(Queries.createUserTable,Queries.createTaskTable)),2秒)''实际上可以吗?我的意思是,我可以在这里添加更多的动作。是对的吗? – Cassie

+0

@Cassie是的。你是对的! – pamu