Java PreparedStatement INSERT クエリでテーブル名を動的に設定できますか?
Java PreparedStatement を使用して一括 INSERT クエリを作成する場合、同じ列形式で異なるテーブルにデータを挿入する必要がある場合があります。クエリ ステートメントには、フィールド値とテーブル名の両方が変数として必要です。
ただし、PreparedStatement では列値のパラメータのみを設定でき、テーブル名には設定できません。テーブル名をハードコーディングすると、準備されたステートメントを使用する目的が無効になります。
解決策
残念ながら、この場合、動的変数をテーブル名として使用することはできません。 PreparedStatement は、データベースに挿入される値のみを指定できるようにすることで、SQL インジェクションを防ぐように設計されています。テーブル名はクエリの構造要素であるため、動的に設定することはできません。
文字列の連結またはプレースホルダー (String.format など) を使用して SQL ステートメントを動的に構築する必要があります。以下は文字列連結を使用した例です:
<code class="language-java">String tableName = "tableName1"; String strQuery = "INSERT INTO " + tableName + " (col1, col2, col3, col4, col5) VALUES (?,?,?,?,?);";</code>
これにより、ステートメントに挿入された特定のテーブル名を含む新しい strQuery が作成されます。次に、この変更された strQuery を使用して PreparedStatement を作成し、それに応じて列の値を設定できます。
このアプローチでは、動的テーブル名を使用する SQL インジェクションのリスクは回避されますが、PreparedStatement のパフォーマンスと読みやすさの利点が犠牲になることに注意してください。実際のアプリケーションでは、特定の状況に応じてメリットとデメリットを比較検討する必要があります。 テーブル名の数が制限されている場合は、複数のプリペアド ステートメントの使用を検討する方が効率的である可能性があります。
以上がJava PreparedStatement INSERT クエリでテーブル名を動的に設定できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。