2

タイプのパラメーターを受け入れるストアド プロシージャがあり、Arrayそれを経由して呼び出したいのですが、インスタンスをインスタンス化してパラメーターとして渡すgroovy.sql.Sql.call(...)方法がわかりません。java.sql.Array

通常の JDBC では、ビアを作成できますが、java.sql.Array経由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 に答える