私はGroovy (2.4.7)
を初めて利用しています。これは私がやろうとしていることです。基本的には、ExcelからSQL Serverにデータをロードすることが目的です。 2つのリストがあり、1つはキーであり、もう1つは値です。バッチSQL文を実行するためにこれらの2つのリストをどのように呼び出すのですか?ここで Groovy - マップまたはリストを使用したバッチクエリ
def k = [Field1,Field2,Field3,Field4,Field5]
def Value1 = 1
def Value2 = 2
def Value3 = 3
def Value4 = 4
def Value5 = 5
def v = [Value1,Value2,Value3,Value4,Value5]
def query = """\
INSERT INTO TableA
($k)
VALUES
($v)
"""
sql.withTransaction {
sql.withBatch(20) {stmt ->
stmt.addBatch(query)
}
}
をこのようにすることで、大きな文字列としてリスト全体を扱いますGroovyのように思えます。私は文字列としてリストを出力し、一重引用符を削除することができますが、それはクールなようではありません。リスト内のフィールドをパラメータ化できますか?それは私にエラーを与えたので、k個のリストについては、私は以下のようなすべてのフィールドに単一引用符を持っている必要があります
:
def k = ['Field1','Field2','Field3','Field4','Field5']
私は、フィールド名が文字列が、以下の方法でなければなりません知っています一度に1つのSQLクエリを実行しました。私はリストを変更するように感じるが、クエリを台無しにするよりも優れています。しかし、私がこのようにしてはならないなら、私を止めてください。
def query = """\ INSERT INTO TableA (Field1,Field2,Field3,Field4,Field5) VALUES (${Value1},${Value2},${Value3},${Value4},${Value5}) """ sql.execute(query)
これらの2つのリストをマップに追加することもできます(下記参照)。これはバッチクエリを実行するより良い方法でしょうか?私はこのプロジェクトで地図をどのように利用するのか分かりません。もちろん
def m = [k, v].transpose().collectEntries {it}
、私が思いついた方法は理想的ではないかもしれないと私はまた、任意のSQLインジェクションを防ぐにしたいです。私はあなたが私にサンプルコードを提供することができれば、ベストプラクティスを公開しています。再び、あなたの時間と助けに感謝します。