2012-11-15 159 views
1

我已经建立了一个用户DSN ODBC数据源在WinXP(版本:Excel中97-2000)用于一个非常简单的Excel电子表格:Groovy脚本挂

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

当我运行下面的Groovy脚本(Groovy的版本: 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

您是否尝试过不使用“def static main”并将所有代码放在方法之外? – djangofan

+0

是的。同样的结果。也试图让它成为一个真正的课堂,并在主体中创建一个新的实例。没有运气:( – klassek

+0

我也“试图关闭和重新启动”,并重新创建ODBC数据源。 – klassek

回答

0

从来没有真正找到一个答案,但最好的建议是由拉尔夫这是在main方法的末尾添加行

System.exit(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" 
} 

Lauched由:

@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 
+0

感谢您的回复对于我从Windows命令提示符运行挂起就像我的cygwin bash shell(如上所述)。有趣的是,你的工作和我的不工作。我注意到你的jdk比我的稍微新一点。你的groovy版本是什么? – klassek

+0

我升级了我的jdk到1.6.0_33,仍然没有运行在DOS外壳或其他地方 – klassek

+0

什么是您的excel驱动程序的版本(在驱动程序下的ODBC数据源管理器)?Mine是4.00.6305.00 – klassek