【问题标题】:How to use Scala's String Interpolation in jOOQ?如何在 jOOQ 中使用 Scala 的字符串插值?
【发布时间】: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)

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

【问题讨论】:

    标签: scala jooq


    【解决方案1】:

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

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

    val result = dsl.fetch(q)
    

    【讨论】:

    • 那是缺少的链接。我不知道我是怎么错过的。
    猜你喜欢
    • 2012-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多