JDBC では、PreparedStatement クラスにより、動的値を使用して SQL クエリを実行する方法が提供されます。ただし、列名を入力パラメータとして使用する場合には制限があります。
PreparedStatement の入力パラメータとして列名を渡すことは可能ですか?
いいえ、JDBC では、PreparedStatements の入力パラメーターとして列名を設定することはできません。 PreparedStatement は、列名のようなメタデータではなく、値のみを受け入れるように設計されています。
次の例を考えてみましょう:
Tables:
クエリ:
SELECT * FROM A, B WHERE "A"."X" = ?
列名を次のように使用しようとしますパラメータ:
PreparedStatement statement = connection.prepareStatement("SELECT * FROM A, B WHERE \"A\".\"X\" = ?"); statement.setString(1, "B"."Y"); // Attempting to set column name as parameter ResultSet resultSet = statement.executeQuery(); // Returns empty result set
SQL クエリでは、WHERE 句フィルターに列名ではなくリテラル値が必要です。列名をパラメータとして渡すと、一致するレコードがないため、空の結果セットが返されます。
SQL ステートメントを動的に変更するには、次の変更を行う必要があります。 PreparedStatement を作成する前のクエリ文字列。例:
String query = "SELECT * FROM A, B WHERE " + columnName + " = ?"; PreparedStatement statement = connection.prepareStatement(query); statement.setString(1, value); // Setting value for input parameter ResultSet resultSet = statement.executeQuery(); // Returns non-empty result set
この場合、columnName 変数には目的の列名が動的に設定されます。このアプローチにより、JDBC の制限に違反することなく SQL クエリをより柔軟に構築できるようになります。
以上がJDBC PreparedStatement は動的列名を入力パラメータとして処理できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。