我在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之后,但这看起来非常极端。
知道脚本挂起的原因吗?
答案 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)
在主要方法的最后。