Скрипт Groovy висит

Я настроил источник данных DSN ODBC пользователя в WinXP (Версия: Excel 97-2000) для очень простой таблицы Excel:

A_NUMBER A_DATE A_STRING 1001 10/1/2012 Red 1002 10/2/2012 Green 1003 10/3/2012 Blue 

Когда я запускаю следующий groovy-скрипт (Groovy Version: 1.7.8 JVM: 1.6.0_10), чтобы прочитать данные

 import groovy.sql.Sql def static main(def args) { def dbParameters = [url: 'jdbc:odbc:mySpreadSheet', user:'', password:'', driver: 'sun.jdbc.odbc.JdbcOdbcDriver'] def sql = Sql.newInstance(dbParameters) sql.eachRow('select * from [Sheet1$]') { row -> println "${row.A_NUMBER} ${row.A_DATE} ${row.A_STRING}" } sql.close() println "done???" } 

он производит следующий вывод:

 1001.0 2012-10-01 00:00:00.0 Red 1002.0 2012-10-02 00:00:00.0 Green 1003.0 2012-10-03 00:00:00.0 Blue done??? 

но он никогда не выходит!

Я попытался запустить его из командной строки Windows и оболочки cygwin bash, и в обоих случаях она зависает, пока я не убью ctrl-c

Я могу заставить скрипт выйти, добавив

throw new RuntimeException("force exit")

после println, но это кажется довольно экстремальным.

Любая идея, почему скрипт висит?

Я сам настраиваю этот тест, используя свой код, точно так же, как и он, и у меня не было никаких проблем с выходом сценария, когда это было сделано. Я думаю, что это имеет какое-то отношение к вашей оболочке Cygwin. Если вы запустите его в обычной оболочке DOS, вы, вероятно, обнаружите, что он выйдет правильно.

 import groovy.sql.Sql def static main(def args) { def dbParameters = [url: 'jdbc:odbc:RefList10000', user:'', password:'', driver: 'sun.jdbc.odbc.JdbcOdbcDriver'] def sql = Sql.newInstance(dbParameters) sql.eachRow('select * from [referenceList10000$]') { row -> println "${row.RefListName} ${row.Value}" } sql.close() println "done" } 

Освещенный:

 @echo off :: Microsoft Windows [Version 6.1.7601] SET JAVA_HOME=C:\Java\jdk1.6.0_33_x32 SET PATH=%JAVA_HOME%\bin;%PATH% groovy SQL.gv pause 

Никогда не нашел ответа, но лучшее предложение было от Ральфа, который должен был добавить линию

 System.exit(0) 

в конце основного метода.

  • Выполняется локально, но не на сервере, потому что «Имя источника данных не найдено и не указан драйвер по умолчанию»
  • java.sql.SQLException: неверный URL-адрес Oracle, указанный для Java8 с использованием драйвера oracle
  • ResultSet -> XLS
  • Проблемы с драйверами Java для 64-разрядных JDBC-ODBC
  • Java JDBC-ODBC не может загрузить драйвер для Excel
  • OpenCsv | SQL | Записывает только заголовок, а не содержимое таблицы
  • Экспорт из базы данных в Excel с использованием JXL RowsExceeded Error
  • Есть ли способ проанализировать имена столбцов вместо их определения?
  • Итерирование столбцов для поиска столбца с последним отличным от нуля значением
  • как сравнить два HashMap <String, List <String >>
  • Доступ к файлу .xlsb в java
  • Давайте будем гением компьютера.