2

我有一个接受类型参数的存储过程,Array我想通过它来调用它,groovy.sql.Sql.call(...)但我不知道如何实例化一个java.sql.Array实例以作为参数传递。

在普通 JDBC 中,我可以创建一个java.sql.Arrayvia,java.sql.Connection.createArrayOf(...)但我无法通过groovy.sql.Sql.

请注意,我通过传递 DataSource 创建了我的 Sql 实例,因此groovy.sql.Sql.getConnection()返回 null。

4

2 回答 2

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[]))
}
于 2013-10-07T15:49:37.900 回答
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)
}
于 2013-10-08T07:54:18.667 回答