PreparedStatements を使用した IN 句のパラメータの設定
Java Database Connectivity (JDBC) では、プリペアド ステートメントにより効率的かつ安全に SQL を実行できます。動的パラメータを使用したクエリ。条件の一部として複数の値を必要とする IN 句を使用する場合、パラメーター設定を正確に処理する必要があります。
質問で説明されているシナリオを考慮してください。
connection.prepareStatement("Select * from test where field in (?)");
これ準備されたステートメントは単一のパラメーターを想定しており、通常は setObject() を使用して設定されます。ただし、IN 句に複数の値を含める必要がある場合は、別のアプローチが必要です。
パラメータの動的リストの処理
パラメータのリストが事前に不明である場合、またはサイズはさまざまですが、次の手法を使用できます:
StringBuilder builder = new StringBuilder(); for (int i = 0; i < values.size(); i++) { builder.append("?,"); } String placeholders = builder.deleteCharAt(builder.length() - 1).toString(); String stmt = "select * from test where field in (" + placeholders + ")";
var stmt = String.format("select * from test where field in (%s)", values.stream().map(v -> "?").collect(Collectors.joining(", ")));
パラメータ値の設定
パラメータ プレースホルダを含む SQL ステートメントの準備ができたら、これを使用して PreparedStatement オブジェクトを作成できます。次に、setObject() メソッドを使用して、リスト内の各値が対応するプレースホルダーに割り当てられます。
int index = 1; for (Object o : values) { pstmt.setObject(index++, o); }
これらの手法に従うことで、パラメータの動的なリストを処理できる IN 句を含むプリペアド ステートメントを作成できます。 、JDBC クエリの柔軟性と効率が向上します。
以上がJDBC で IN 句を含む PreparedStatement を効率的に使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。