Search code examples
mysqlsqlscalaplayframeworkanorm

Could not find implicit value for parameter c: anorm.Column[Float]


I got this similar question but it doesn't help me. (Anorm parse float values).

And I can honestly say I didn't understand the solution of that question.
I am getting this complie time error:

could not find implicit value for parameter c: anorm.Column[Float]

at

def getInformation(id: Long): List[(Float, Float, Float)] = {
    DB.withConnection { implicit con =>
      val query = SQL("select principal,interest,value from myTable where userId={id} and status=true").on("id"->id)
      val result = query().map { row =>
        Tuple3(row[Float]("principal"), row[Float]("inetrest"), row[Float]("value"))
       //      ^
      }.toList
      return result
    }
  }

Solution

  • try this...

    def getInformation(id: Long): List[(Float, Float, Float)] = {
        DB.withConnection { implicit con =>
          val query = SQL("select principal,interest,value from myTable where userId={id} and status=true").on("id"->id)
          val result = query().map { row =>
            Tuple3(row[Float]("principal").asInstanceOf[Float], row[Float]("inetrest").asInstanceOf[Float], row[Float]("value").asInstanceOf[Float])
          }.toList
          return result
        }
      }
    
    implicit def rowToFloat: Column[Float] = Column.nonNull { (value, meta) =>
    val MetaDataItem(qualified, nullable, clazz) = meta
    value match {
      case d: Float => Right(d)
      case _ => Left(TypeDoesNotMatch("Cannot convert " + value + ":" + value.asInstanceOf[AnyRef].getClass + " to Float for column " + qualified))
    }
    }