我目前正在探索 JOOQ 的可能性,想要谨慎起见,仅将 JOOQ 用作 SQL 构建器。我将数据库模式定义为从 CustomTable
派生的类,以获得类型安全性。
这会导致以下代码:
Param<Integer> pId = ...
Query query = context.select(sometable.somefield.max())
.from(sometable)
.where(sometable.id.eq(pId)
;
这里的sometable
是一个变量,它持有我的一个表实例。
目前我对query
所做的操作类似于:
PreparedStatement pstmt = connection.prepareStatement(query.getSQL());
pstmt.setObject(1, pId.getValue(), pId.getDataType().getSQLType());
但是,一旦语句有更多参数,我开始在JOQQ的实现中遇到复杂的依赖关系,特别是对于
setObject
的第一个参数。我想使用query.getBindValues()
,但这只返回要绑定到语句的普通Java对象。我必须假设顺序与setObject
的位置顺序匹配,并且此外我现在缺少getSQLType()
。因此,这也不是一个好方法。然后,我希望能找到类似于query.getPreparedStatement(connection)
这样的东西,以从提供的连接中创建陈述并填充所有参数,但似乎不存在这种方法。我是否错过了一些巧妙的方法可以从JOOQ Query
中获取PreparedStatement
呢?