如何在 jOOQ 中使用 Scala 的字符串插值?

How to use Scala's String Interpolation in jOOQ?

我想在 Scala 中使用 jOOQ 的字符串插值功能,例如 resultQuery"SELECT * FROM objects":

// setup connection
val con = DriverManager.getConnection(url, userName, password)

// create DSLContext
val dsl = DSL.using(con, SQLDialect.POSTGRES_9_4)

// normal use of DSLContext
dsl.resultQuery("SELECT * FROM objects")

// intented use of string interpolation
val q = resultQuery"SELECT * FROM objects"

val result = q.fetch()
println(result)

运行 此代码(没有任何外部配置等)导致以下异常:

Exception in thread "main" org.jooq.exception.DetachedException: Cannot execute query. No Connection configured
    at org.jooq.impl.AbstractQuery.execute(AbstractQuery.java:312)
    at org.jooq.impl.AbstractResultQuery.fetch(AbstractResultQuery.java:305)
    ...

看来 SQLInterpolation 使用的是默认设置。我试图通过将 DSLContextConfiguration 设置为隐式来提供这些设置,但我仍然收到相同的异常:

implicit val dsl = DSL.using(con, SQLDialect.POSTGRES_9_4)
implicit val config = new DefaultConfiguration().derive(con)
                                                .derive(SQLDialect.POSTGRES_9_4)

如何为字符串插值正确提供我的设置(连接、方言等)?

您使用字符串插值创建的 ResultQuery 对象不是 "attached",即它不能单独执行。

换句话说,您应该 运行 这样的查询,而不是:

val result = dsl.fetch(q)