Как использовать MSSQL Select в Groovy

#sql-server #groovy #soapui

#sql-сервер #groovy #soapui

Вопрос:

Я пытаюсь получить доступ к таблице из базы данных. Сначала я проверил подключение к базе данных, и это сработало. Затем я проверил close db, и это сработало. После того, как я попытаюсь выбрать пару элементов из таблицы и распечатать их с помощью команды eachraw.

Я получаю сообщение об ошибке ниже:

 Wed Oct 05 07:26:01 EDT 2016:INFO:No signature of method: groovy.sql.Sql.eachrow() is applicable for argument types: (java.lang.String, Script26$_run_closure1) values: [SELECT Type,Description FROM A.dbo.Type, ...]
Possible solutions: eachRow(java.lang.String, groovy.lang.Closure), eachRow(groovy.lang.GString, groovy.lang.Closure), eachRow(java.lang.String, groovy.lang.Closure, groovy.lang.Closure), eachRow(java.lang.String, java.util.List, groovy.lang.Closure), eachRow(java.lang.String, java.util.Map, groovy.lang.Closure), eachRow(java.util.Map, java.lang.String, groovy.lang.Closure)
  

Это мой код:

     import groovy.sql.Sql


    try{

    def dbURL="jdbc:sqlserver://1.1.2.1:1433;databaseName=A"
    def dbUsername="sa"
    def dbPassword="password"
    def dbDriver="com.microsoft.sqlserver.jdbc.SQLServerDriver"

    def db = Sql.newInstance(dbURL,dbUsername,dbPassword,dbDriver)

    def q1 = "SELECT Type,Description FROM A.dbo.Type"


    db.eachrow(q1){row ->
       log.info "${it.toString().Description}"
    }



   }catch (Exception e){
       log.info "Some db error"
       log.info e.getMessage()

   }finally{

   db.close()

   }
  

Комментарии:

1. Спасибо @Rao за обновление.

2. eachrow чувствителен к регистру, и у вас он в нижнем регистре. Не могли бы вы eachRow вместо этого проверить?

3. Я проверил это. Теперь я получаю «Нет такого свойства: оно для класса: Script30»

4. Кроме того, я должен закомментировать db.close(), иначе он выдает ошибку (не исключение)

5. Определите db перед try блоком.

Ответ №1:

Метод eachRow, не eachrow, и если вы укажете имя переменной строки внутри замыкания, вы должны использовать ‘row’ вместо ‘it’. Итак, ваш код должен выглядеть следующим образом:

 db.eachRow(q1){row ->
       log.info "${row.description}"
}