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

Posted

技术标签:

【中文标题】如何在 jOOQ 中使用 Scala 的字符串插值?【英文标题】:How to use Scala's String Interpolation in jOOQ? 【发布时间】:2016-03-04 08:27:45 【问题描述】:

我想在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)

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

【问题讨论】:

【参考方案1】:

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

换句话说,您应该像这样运行查询:

val result = dsl.fetch(q)

【讨论】:

那是缺少的链接。我不知道我是怎么错过的。

以上是关于如何在 jOOQ 中使用 Scala 的字符串插值?的主要内容,如果未能解决你的问题,请参考以下文章

scala中的字符串插值

scala中的字符串插值

jooq无法在游戏中生成类 - scala

使用 scala 在 Jooq 中进行交易和条件更新

Scala字符串插值 - StringContext

jooq + scala 代码生成:对象 AbstractKeys 中的方法 createIndex 无法在对象 org.jooq.impl.AbstractKeys 中访问