如何在 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
似乎正在使用默认设置。我尝试通过将 DSLContext
和 Configuration
设置为隐式来提供这些设置,但我仍然收到相同的异常:
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 的字符串插值?的主要内容,如果未能解决你的问题,请参考以下文章
jooq + scala 代码生成:对象 AbstractKeys 中的方法 createIndex 无法在对象 org.jooq.impl.AbstractKeys 中访问