【问题标题】:Slick 3.2.x on unsupported database不受支持的数据库上的 Slick 3.2.x
【发布时间】:2018-05-29 18:13:07
【问题描述】:

让我刷新一下已经问过question,因为新手并不清楚答案。 我正在尝试从 Play、Slick 3.2.3 和不受支持的数据库(准确地说是 RDB)开始。我从 Play 网站上的 play-scala-isolated-slick-example 开始。 Slick 不支持 RDB 数据库,因此我尝试使用通用 Jdbc 配置文件(我认为适合所有):

package test.mydb.slick
import javax.inject.{Inject, Singleton}
import slick.driver.JdbcProfile
import slick.jdbc.JdbcBackend.Database
import test.mydb.{MyTblDAO, Tbl}  // case class defined there
import scala.concurrent.{ExecutionContext, Future}
import scala.language.implicitConversions
import scala.reflect.ClassTag

@Singleton
class SlickMyTblDAO @Inject()(db: Database)(implicit ec: ExecutionContext) 
    extends MyTblDAO with test.mydb.slick.Tables {

//  override val profile: JdbcProfile = _root_.slick.jdbc.JdbcProfile
override val profile: JdbcProfile = slick.driver.JdbcProfile

import profile.api._

def lookup(id: String): Future[Option[MyTbl]] = {....  and so on

这段代码没有被编译,因为:

type mismatch;
[error]  found   : slick.driver.JdbcProfile.type
[error]  required: slick.driver.JdbcProfile
[error]     (which expands to)  slick.jdbc.JdbcProfile
[error]   override val profile: JdbcProfile = slick.driver.JdbcProfile
[error]                                                    ^

不确定我是否完全理解问题的根源,但我想不能直接使用 Jdbc 配置文件。 answer 表示“可以通过 trait slick.jdbc.JdbcProfile 的自定义实现来支持其他数据库”。这是否意味着我需要自己实现配置文件?初学者可以实现吗?我只需要一个简单的 DML,不需要 DDL,也不需要开始连接。

【问题讨论】:

    标签: scala playframework slick


    【解决方案1】:

    错误消息告诉您profile 需要扩展 trait JdbcProfile,但您将 companion object JdbcProfile 传递给它,这不扩展同名特征。

    要回答您的其他问题 - 是的,恐怕您必须自己实现 JdbcProfile,而且我相信这对于新手来说可能会很困难,因为 Slick 的 API 非常先进。

    【讨论】:

    • 嗯...够奇怪,但它成功了。当然,从现有配置文件和疯狂猜测创建的配置文件远非完美,但我得到了第一个结果。非常感谢。
    • 太好了,如果可能的话,你能给出更多的解释或例子吗?你还在用 slick 3.X @Valent
    • 这绝对不是一门火箭科学。我查看了 Oracle 配置文件,注释掉了所有 DDL 内容,因为它不感兴趣并预计会带来很多问题,注释掉 RDB 中不存在的一些特性,并添加了一些确实存在的特性。我试图尽可能保守,以便结果能够进行简单的查询(老实说,我没有测试复杂的东西),但目前对我来说已经足够了。所有这些都是在 Slick 3.2.3 源代码中完成的。我可以分享结果,但我想您不需要 RDB 配置文件而是其他东西。
    猜你喜欢
    • 1970-01-01
    • 2019-03-14
    • 2015-04-29
    • 2020-02-18
    • 2014-06-29
    • 2018-11-30
    • 1970-01-01
    • 2022-08-04
    • 2022-06-16
    相关资源
    最近更新 更多