打印出 TableQuery[Restaurants] 中的所有数据

Print out all the data within a TableQuery[Restaurants]

def displayTable(table: TableQuery[Restaurants]): Unit = {
    val tablequery = table.map(_.id)
    val action = tablequery.result
    val result = db.run(action)
    result.foreach(id => id.foreach(new_id => println(new_id)))
    total_points = total_points + 10
  }

我试过将所有数据打印到屏幕上,但我没有成功。我的问题是为什么没有打印出来。我正在使用 Scala 和 JDBC connection aka Slick。如果你删除 new_id => println(new_id),你会得到:

def displayTable(table: TableQuery[Restaurants]): Unit = {
    val tablequery = table.map(_.id)
    val action = tablequery.result
    val result = db.run(action)
    result.foreach(id => println(id))
    total_points = total_points + 10
  }

此代码产生如下输出:“Vector()”。有人可以帮我打印出所有数据吗?我使用以下代码加载它:

def fillTable(): TableQuery[Restaurants] ={
    println("Table filled.")

    val restaurants = TableQuery[Restaurants]

    val setup = DBIO.seq(
      restaurants.schema.create
    )

    val setupFuture = db.run(setup)

    val bufferedSource = io.Source.fromFile("src/main/scala/Restaurants.csv")
    for (line <- bufferedSource.getLines) {
      val cols = line.split(",").map(_.trim)
      var restaurant = new Restaurant(s"${cols(0)}",s"${cols(1)}", s"${cols(2)}",
        s"${cols(3)}", s"${cols(4)}",s"${cols(5)}",s"${cols(6)}",
        s"${cols(7)}",s"${cols(8)}",s"${cols(9)}")

      restaurants.forceInsert(s"${cols(0)}",s"${cols(1)}", s"${cols(2)}",
           s"${cols(3)}", s"${cols(4)}",s"${cols(5)}",s"${cols(6)}",
           s"${cols(7)}",s"${cols(8)}",s"${cols(9)}")

      total_rows = total_rows + 1

这是我的第一个问题,所以我对格式表示歉意。

Vector() 是您在 displayTable 的第二个版本中的输出这一事实强烈暗示您的查询返回空结果,因此没有要打印的 ID。我自己没有 运行 你的代码,但我怀疑这是因为 restaurants.forceInsert returns 一个动作,你需要 db.run() 它才能实际执行查询。

我也很好奇为什么你创建了 var restaurant = ... 但又忽略了它,并再次调用 forceInsert 从 csv 值重新创建元组。为什么不 restaurants.forceInsert(restaurant)