Java PreparedStatement INSERT クエリでのテーブル名の動的指定
Java の PreparedStatement
を使用してバッチ INSERT クエリを作成するには、多くの場合、変数フィールド値と変数テーブル名の両方を処理する必要があります。 これにより、各テーブルのクエリを書き直すことなく、同一の列構造を持つ複数のテーブルにデータを挿入できます。
一般的ですが欠陥のあるアプローチは、SQL ステートメント内でテーブル名を直接パラメータ化しようとします。
<code class="language-java">String strQuery = "INSERT INTO ? (col1, col2, col3, col4, col5) VALUES (?,?,?,?,?,?);"; </code>
PreparedStatement
パラメータ化はテーブル名やスキーマ名ではなく列 値 を対象としているため、これは機能しません。 stmt.setString(1, "tableName1");
効果的な解決策: 文字列の連結
正しい方法では、PreparedStatement
を作成する前にテーブル名を連結して SQL クエリ文字列を動的に構築します。 これにより、テーブル名がクエリに正しく組み込まれるようになります:
<code class="language-java">String tableName = "tableName1"; String query = "INSERT INTO " + tableName + " (col1, col2, col3, col4, col5) VALUES (?,?,?,?,?,?);"; PreparedStatement stmt = connection.prepareStatement(query);</code>
この手法は、共有列定義を持つ複数のテーブルを対象としたバッチ化された INSERT 操作を効率的に管理するために必要な柔軟性を提供します。 tableName
が信頼できないソースからのものである場合は、SQL インジェクションの脆弱性を防ぐために必ずサニタイズしてください。
以上がJava PreparedStatement INSERT で変数テーブル名を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。