Как получить соединение DataSource с классом Groovy с помощью этого кода Groovy?

Раньше у меня был класс Java в моем приложении Grails, но мне нужно было получить соединение от DataSource.groovy поэтому я передал его классу Groovy и получил приложение контекста. Но как я могу подключиться к этому источнику данных с помощью этого кода?

def dataSource = ctx.getBean('dataSource_Executer') // auto injected and referenced to a datasource
Connection conn = null;
Statement stmt = null;
Class.forName('driver');
conn = DriverManager.getConnection(dataSource);// Here it's the trouble

Мне нужно это так, потому что мне нужны метаданные результата запроса, как это:

 stmt = conn.createStatement();
 def rs = stmt.executeQuery('query');
 def rsmd = rs.getMetaData();
 num = rsmd.getColumnCount();

и контролировать его с помощью:

 while(rs.next()){..........}

2 ответа

Решение

Я бы использовал groovy.sql пакет, чтобы сделать это.

import groovy.sql.GroovyRowResult
import groovy.sql.Sql

def dataSource = ctx.getBean('dataSource_Executer')
def connection = new Sql(dataSource)
def results = connection.rows('SELECT ...')
results.each { r ->
  println r['columnName']
  ...
}

Вы также можете получить доступ к ResultSetMetaData также. Этот блог имеет хороший пример того, как это сделать.

Вы также можете использовать автоматическое подключение в сервис / контроллер:

class SomeService {

 DataSource dataSource

 @Transactional
 def someMethod( params = [:] ){
   Sql db = new Sql( dataSource )
   db.eachRow( "select * from table" ) {
     doSometething it
   }
   db.close()
 }
Другие вопросы по тегам