mySQLで実行されているJdbcTemplateを使用して、次のSQLをスケーラブルな方法で実行するにはどうすればよいですか。この場合、スケーラブルとは次のことを意味します。
これがステートメントです:
INSERT INTO myTable (foo, bar) VALUES ("asdf", "asdf"), ("qwer", "qwer")
POJOのフィールドfoo
とbar
フィールドのリストがあるとします。リストを反復処理して実行できることを理解しています。
jdbcTemplate.update("INSERT INTO myTable(foo, bar) VALUES (?, ?)", paramMap)
しかし、それは最初の基準を達成しません。
私も実行できると思います:
jdbcTemplate.batchUpdate("INSERT INTO myTable(foo, bar) VALUES (?, ?)", paramMapArray)
しかし、私が知ることができることから、それはSQLを1回コンパイルして複数回実行し、最初の基準を再び失敗させます。
両方の基準を満たしているように見える最後の可能性は、SQLを単にで構築することですがStringBuffer
、それは避けたいと思います。
複数行の挿入(「行値コンストラクタ」を使用)は、実際にはSQL-92標準の一部です。http://en.wikipedia.org/wiki/Insert_(SQL)#Multirow_insertsを参照してください。
一部のデータベースはこの構文をサポートしていませんが、多くはサポートしています。私の経験では、Derby / Cloudscape、DB2、Postgresql、および新しいHypersonic 2。* +リリースがこれをサポートしています。
これをPreparedStatementとして機能させることについてのあなたの懸念は理解できますが、Spring JDBCが特定のクエリの項目のコレクションを((?)のように)自動的に処理する同様のケースを見ましたが、このケースを保証することはできません。
(この投稿への2番目のリンクを追加することはできません)で、何らかの助けになるかもしれない役立つ情報を見つけました。
2番目の要件(任意の数の引数で機能)が最も厳密な意味で満たされることはおそらく不可能であることを私は言うことができます:私が使用したすべてのデータベースは、実行されるクエリの長さの制限を課します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加