如何使用Squeryl转储所有表

时间:2013-08-24 09:55:27

标签: scala squeryl

我正在尝试使用Squeryl为数据库编写一个快速数据浏览器,但我很难以通用方式迭代所有表。基于Squeryl SchoolDb example我尝试了以下内容:

  def browseTable(name: String) = {
     SchoolDb.tables.find(_.name == name) map { t=>
          val fields = t.posoMetaData.fieldsMetaData
          val rows = from (t) (s => select(s))
          // Print the columns
          println(fields.map(_.columnName).mkString("\t"))
          rows map { row =>
            println(fields.map(f => f.get(row)).mkstring("\t"))
          }
     } 

编译器对这种尝试不太满意(缺少'row'的类型类型),我可以理解它的困境。明确地将参数声明为Any只是将编译错误更改为“在'f.get(row)'

上没有Any => org.squeryl.dsl.ast.TypedExpressionNode [_]”的隐式视图

如何修复此问题或更改模型(可能添加某种特征)以启用对所有表中所有数据的通用访问?

1 个答案:

答案 0 :(得分:1)

编译器抱怨,因为f.get方法需要AnyRef参数。 AFAIK,在Scala中可以安全地转换为AnyRef - 如果需要,编译器将强制进行必要的装箱。所以我认为这应该有效:f.get(row.asInstanceOf[AnyRef])

编辑:我刚测试了这个并且有效。