ホームページ >データベース >mysql チュートリアル >Java PreparedStatement INSERT で変数テーブル名を使用するにはどうすればよいですか?

Java PreparedStatement INSERT で変数テーブル名を使用するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-13 06:33:46358ブラウズ

How Can I Use a Variable Table Name in a Java PreparedStatement INSERT?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。