2

非常に単純なExcelスプレッドシート用に、WinXP(バージョン:Excel 97-2000)でユーザーDSNODBCデータソースを設定しました。

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のコマンドプロンプトとcygwinbashシェルから実行しようとしましたが、どちらの場合も、ctrl-cで強制終了するまでハングします。

追加することで、スクリプトを強制的に終了できます

throw new RuntimeException("force exit")

printlnの後ですが、それはかなり極端に思えます。

スクリプトがハングしている理由はありますか?

4

2 に答える 2

1

コードをそのまま使用してこのテストを自分でセットアップしましたが、完了時にスクリプトが終了することに問題はありませんでした。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
于 2012-11-15T17:29:19.833 に答える