我正在尝试使用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,并且不再有效。
我该怎么做才能执行此操作?
答案 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
来获取计数。