まず、パフォーマンスが問題であると測定されるまで、最も明白な解決策を採用する必要があるというJonの答えは、一般的に確かに正しいアプローチです。
あなたのパフォーマンスの懸念は見当違いではないと思います。私は確かに、プリコンパイルされた複雑なステートメントがパフォーマンススケールで劇的に失敗するのを見てきました(MS-SQL2000の場合)。その理由は、ステートメントが非常に複雑で、パラメーターに応じていくつかの潜在的な実行パスがあったためですが、コンパイルによって1つのパラメーターのセットがロックされ、次のパラメーターのセットが遅すぎたため、再コンパイルによって次の再計算が強制されました。さまざまなパラメータセットに適した実行プラン。
しかし、実際にそれを見るまで、その懸念は非常に遠いものです。
ここでの根本的な問題は、パラメーターのエスケープがデータベース固有であるということです。したがって、データベースのJDBCドライバーがこれを行うための非標準的なものを提供していない限り(ほとんどありません)、別のライブラリーまたは別のエスケープメカニズムが必要になります。この1つのデータベースに非常に固有です。
あなたの質問の言い回しから、あなたのパフォーマンスの懸念がまだそのような解決策を見つける(または開発する)ことに値するところまで来ていないように思えます。
また、JDBCドライバーがすべてこのように動作するわけではありませんが、技術的には、事前コンパイルはPreparedStatementオブジェクトにキャッシュされることになっているため、それを破棄して毎回新しいPreparedStatementを取得する必要はありません。実際には何かをキャッシュしているため、問題全体がミュートになっている可能性があり、特定のJDBCドライバーについて調査する必要があります。
仕様から:
INパラメータの有無にかかわらずSQLステートメントは、プリコンパイルして、PreparedStatementオブジェクトに格納できます。このオブジェクトを使用して、このステートメントを複数回効率的に実行できます。