2012-11-15 154 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