Home > OS >  Print out all the data within a TableQuery[Restaurants]
Print out all the data within a TableQuery[Restaurants]

Time:03-30

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
  }

I have tried to print out all the data to the screen but I have gotten no where. My question is why does nothing print out. I am using Scala and JDBC connection aka Slick. If you remove new_id => println(new_id), you get:

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
  }

This code produces an out put like the following: "Vector()". Can someone please help me print out all the data out? I loaded it in using the following code:

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

This is my first question so I apologize for the format.

CodePudding user response:

The fact that Vector() is your output in the second version of displayTable is a strong hint that your query is returning an empty result, and therefore has no id's to print out. I haven't run your code myself, but I suspect this is because restaurants.forceInsert returns an action, and you need to db.run() it to actually execute the query.

I'm also curious why you create var restaurant = ... but then ignore it, and call forceInsert recreating the tuple from the csv values again. Why not restaurants.forceInsert(restaurant)?

  • Related