使用Slick 1.0.0计算行数

时间:2013-02-12 16:01:37

标签: scala slick

我正在尝试使用Slick 1.0.0创建一个返回与以下SQL语句等效的行计数的查询:

SELECT COUNT(*) FROM table;

到目前为止我所拥有的是:

val query = for {
  row <- Table
} yield row
println(query.length)

这会打印scala.slick.ast.FunctionSymbol$$anon$1@6860991f。此外,query.length似乎属于scala.slick.lifted.Column类型。我找不到执行查询的方法。我在文档和其他任何地方都可以找到的所有示例都不会在Column上运行,或者只适用于ScalaQuery,并且不再有效。

我该怎么做才能执行此操作?

3 个答案:

答案 0 :(得分:4)

任何这些都可以解决问题:

Query(MyTable).list.length

(for{mt <- MyTable} yield mt).list.length

(for{mt <- MyTable} yield mt.count).first

<强>更新

打印H2数据库日志会显示最后一个查询的最佳查询:

 03:31:26.560 [main] DEBUG h2database - jdbc[2]
 /**/PreparedStatement prep10 = conn1.prepareStatement("select select count(1) from \"MYTABLE\" s5", 1003, 1007);

答案 1 :(得分:4)

虽然我无法检查生成的sql,但是你可以通过删除.list:

来获得更短的源代码
Query(MyTable.length).first

答案 2 :(得分:2)

使用:

val query = for(row <- Table) yield row 
println(Query(query.count).first)

count相当于“SELECT COUNT(*)FROM Table”。 为了获得第一行和唯一一行,您必须使用first来获取计数。