找不到参数连接的隐式值:java.sql.Connection
could not find implicit value for parameter connection: java.sql.Connection
我从 Scala 开始。我在模型中有我的方法:
def get_courses = {
DB.withConnection { implicit connection =>
val result = SQL("SELECT * FROM courses")
result
}
当我从控制器调用它时,我正在这样做(我想得到一个列表):
val AllCourses = CourseModel.get_courses
// Transform the resulting Stream[Row] as a List[(String)]
val CoursesList = AllCourses().map(row =>
row[String]("name")
).toList
当我尝试转换列表中的流[行](来自https://www.playframework.com/documentation/2.0/ScalaAnorm)时出现错误
could not find implicit value for parameter connection: java.sql.Connection
与 AllCourses() 代码相关。
有什么想法吗?
然而这很奇怪,因为当我添加所有相同的方法时
def get_courses = DB.withConnection { implicit connection =>
val result = SQL("SELECT * FROM courses")
// Transform the resulting Stream[Row] as a List[(String)]
val CoursesList = result().map(row =>
row[String]("name")
).toList
}
有效(如 https://www.playframework.com/documentation/2.0/ScalaAnorm 示例)
但我想在控制器中将它们分开...
我怀疑您的问题的答案是,当您简单地定义 sql 语句时,不会使用实际的数据库连接。如果将鼠标悬停在 SQL 调用上,您会看到它不需要数据库连接。然而,result() 或 SQL("...")() 确实需要一个连接,而这正是对数据库进行实际调用的地方。
我能否谦虚地建议您编写控制器仅在您的 class 对象上运行,而不是与 anorm/database-level 人工制品交互。因此,例如,您的模型层将有一个方法 get_courses : List[Course]
(或者可能只是 all
,因为您可能会将其引用为 Course 伴随对象的方法,即 Course.all()
,因此使用 course在方法名称中可能不是必需的)which returns Course 对象。您的控制器会根据需要调用它,而无需担心 Course 对象是来自数据库、json 文件还是来自任何地方。
我还发现解析器非常有用,因此定义一个解析器 courseP
例如,它创建课程对象,然后在您需要阅读一门或多门课程的任何地方使用 - 类似于 SQL("select ... from course").as(courseP *)
用于课程列表,或 SQL("select ...").as(courseP.singleOpt)
用于选项[课程]。
我从 Scala 开始。我在模型中有我的方法:
def get_courses = {
DB.withConnection { implicit connection =>
val result = SQL("SELECT * FROM courses")
result
}
当我从控制器调用它时,我正在这样做(我想得到一个列表):
val AllCourses = CourseModel.get_courses
// Transform the resulting Stream[Row] as a List[(String)]
val CoursesList = AllCourses().map(row =>
row[String]("name")
).toList
当我尝试转换列表中的流[行](来自https://www.playframework.com/documentation/2.0/ScalaAnorm)时出现错误
could not find implicit value for parameter connection: java.sql.Connection
与 AllCourses() 代码相关。
有什么想法吗?
然而这很奇怪,因为当我添加所有相同的方法时
def get_courses = DB.withConnection { implicit connection =>
val result = SQL("SELECT * FROM courses")
// Transform the resulting Stream[Row] as a List[(String)]
val CoursesList = result().map(row =>
row[String]("name")
).toList
}
有效(如 https://www.playframework.com/documentation/2.0/ScalaAnorm 示例)
但我想在控制器中将它们分开...
我怀疑您的问题的答案是,当您简单地定义 sql 语句时,不会使用实际的数据库连接。如果将鼠标悬停在 SQL 调用上,您会看到它不需要数据库连接。然而,result() 或 SQL("...")() 确实需要一个连接,而这正是对数据库进行实际调用的地方。
我能否谦虚地建议您编写控制器仅在您的 class 对象上运行,而不是与 anorm/database-level 人工制品交互。因此,例如,您的模型层将有一个方法 get_courses : List[Course]
(或者可能只是 all
,因为您可能会将其引用为 Course 伴随对象的方法,即 Course.all()
,因此使用 course在方法名称中可能不是必需的)which returns Course 对象。您的控制器会根据需要调用它,而无需担心 Course 对象是来自数据库、json 文件还是来自任何地方。
我还发现解析器非常有用,因此定义一个解析器 courseP
例如,它创建课程对象,然后在您需要阅读一门或多门课程的任何地方使用 - 类似于 SQL("select ... from course").as(courseP *)
用于课程列表,或 SQL("select ...").as(courseP.singleOpt)
用于选项[课程]。