Groovy脚本挂起

时间:2012-11-15 00:16:44

标签: excel jdbc groovy

我在WinXP(版本:Excel 97-2000)中为一个非常简单的Excel电子表格设置了一个用户DSN ODBC数据源:

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 shell运行它,在这两种情况下它都挂起,直到我用ctrl-c杀死

我可以通过添加

强制脚本退出

throw new RuntimeException("force exit")

在println之后,但这看起来非常极端。

知道脚本挂起的原因吗?

2 个答案:

答案 0 :(得分:1)

我自己使用你的代码设置了这个测试,就像它完全一样,当脚本完成时我没有遇到任何问题。我认为它与你的Cygwin shell有关。如果你在常规的DOS shell中运行它,你可能会发现它正常退出。

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

答案 1 :(得分:1)

从来没有真正找到答案,但最好的建议来自拉尔夫,即添加行

System.exit(0)

在主要方法的最后。