2012-02-01 7 views
0

異なるSQL接続を使用して、1つのテーブルからデータを選択し、別のテーブルにバッチで挿入したいとします。 2つのテーブルはまったく同じように設定されています。現時点では私が持っている:groovy sqlを使用してデータベーステーブルを移行する際の問題

destination.withBatch(1000) { stmt -> 

    source.eachRow(selectQuery) { 

     String insertString = """ 
        INSERT INTO dest_table 
        VALUES (
          ${it[0]}, 
          ${it[1]}); 
        """ 

     try { 
      stmt.addBatch(insertString) 
     } 
     catch (Exception e) { 
      println insertString 
     } 
    } 
} 

何かが、このプロセスではデータ型に発生するようです、それが原因で、大腸の'a:string'のような文字列を挿入する非常に不幸なりますので。

私は'${it[0]}'を実行して強制することができますが、それは文字列として扱われますが、これは他のデータ型になると問題を引き起こします。

また、私のエラー処理は間違いなく正しく機能していません。私はそれが実行できなかったインサートを印刷してから、正常に実行してほしい。

おかげ

+0

あなたの 'selectQuery'とは何ですか?実際の例外は何ですか? –

答えて

1

それは、グルーヴィーなSQLがあなたのSQL文字列から準備された文を作成して、その中のコロンでその何かが、パラメータのプレースホルダとして解析されている可能性があります。

したがって、私は、フローと一緒に行くと、SQLステートメントにインラインで配置する代わりに、データ値を別々にバインドすることをお勧めします。これにより、プリペアドステートメントがデータベースによってキャッシュされるため、パフォーマンスが向上する可能性があります。

関連する問題