當前正在探索JOOQ的可能性,我想仔細地開始並僅將JOOQ用作SQL構建器。我將數據庫模式定義爲來自CustomTable
的類,以獲得類型安全性。 這導致瞭如下代碼從jooq查詢中創建PreparedStatement
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());
但只要有對語句的詳細參數,我開始變得對JOOQ的實現對於setObject
第一個參數複雜的依賴關係。
我以爲使用query.getBindValues()
,但這隻返回純Java對象綁定到語句。我必須假設該訂單與setObject
的訂單訂單相匹配,另外我現在錯過了getSQLType()
。所以這也不是好方法。
然後我希望找到像query.getPreparedStatement(connection)
這樣的東西來創建聲明從提供的連接與所有參數很好地填充,但似乎並不存在。
有沒有一些簡潔的方法可以讓我失蹤的JOOQ Query
中的PreparedStatement
?
爲了完整起見,您可以添加一個簡短的解釋,說明爲什麼您不想使用jOOQ來執行查詢嗎? – 2014-10-26 23:21:06
我還沒準備好將自己的靈魂完全賣給JOOQ :-)最重要的是,我讀到JOOQ最初是作爲一個SQL構建器開始的,我認爲有三個職責的自然分離:1)獲取查詢或語句權限,2)通過池,連接,語句等處理與數據庫的連接,3)從查詢結果中讀取數據。通過獲取PreparedStatement來交換Connection和JOOQ查詢將允許(1)和(2)很好地分離。 – Harald 2014-10-27 12:06:51
你的靈魂可以跑,但它不能隱藏。 jOOQ一直準備5年的陳述 - 大公司在製作中使用...不確定你在擔心什麼:)從一開始,jOOQ將變量綁定到PreparedStatement。 SQL提取功能僅在後來才提供。無論如何,我會給出答案 – 2014-10-27 18:41:06