2013-10-07 81 views
1

我有一個存儲過程接受類型Array的參數,我想通過groovy.sql.Sql.call(...)調用它,但我不知道如何實例化一個java.sql.Array實例作爲參數傳遞。Groovy SQL和數組參數

在普通的JDBC中,我可以通過java.sql.Connection.createArrayOf(...)創建一個java.sql.Array,但我無法通過groovy.sql.Sql獲得對連接的引用。

請注意,我已通過傳遞數據源創建了我的Sql實例,因此groovy.sql.Sql.getConnection()返回null。

回答

2

groovy.sql.Sql類將根據需要從DataSource創建一個連接,並在完成時將其丟棄。使用cacheConnection保持連接,以供您使用:

def sql = new Sql(datasource) 
sql.cacheConnection { 
    assert sql.connection != null 
    println sql.rows('select * from mytable where arraycol = ?', 
     sql.connection.createArrayOf('integer', [1, 2, 3] as Object[])) 
} 
1

感謝@ataylor。用你的答案作爲指導,我發現連接被傳遞給閉包,所以你不需要引用sql.getConnection()。我想出了我更喜歡的以下內容:

def sql = new Sql(datasource) 
sql.cacheConnection { Connection con -> 
    assert con != null 
    def array = con.createArrayOf('integer', [1, 2, 3] as Object[])) 
    println sql.rows('select * from mytable where arraycol = ?', array) 
}