2013-10-07 2 views
1

Array 유형의 매개 변수를 허용하는 저장 프로 시저가 있는데 groovy.sql.Sql.call(...)을 통해 호출하고 싶습니다. java.sql.Array 인스턴스를 매개 변수로 전달하는 방법을 파악할 수 없습니다.Groovy SQL 및 배열 매개 변수

정상적인 JDBC에서는 java.sql.Arrayjava.sql.Connection.createArrayOf(...) 통해 만들 수 있지만 groovy.sql.Sql을 통한 연결에 대한 참조를 얻을 수 없습니다.

참고, groovy.sql.Sql.getConnection()이 null을 반환하도록 DataSource를 전달하여 내 Sql 인스턴스를 만들었습니다.

답변

2

클래스 groovy.sql.Sql은 데이터 소스의 요청에 따라 연결을 만들고 완료되면 버립니다. 당신이 사용하는 주변의 연결을 유지하기 위해 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) 
}