> 데이터 베이스 > MySQL 튜토리얼 > JDBC preparedStatement가 동적 열 이름을 입력 매개변수로 처리할 수 있습니까?

JDBC preparedStatement가 동적 열 이름을 입력 매개변수로 처리할 수 있습니까?

Susan Sarandon
풀어 주다: 2024-12-27 06:25:13
원래의
606명이 탐색했습니다.

Can JDBC PreparedStatement Handle Dynamic Column Names as Input Parameters?

동적 열 이름을 사용하는 JDBC ReadyStatement

JDBC에서 preparedStatement 클래스는 동적 값을 사용하여 SQL 쿼리를 실행하는 방법을 제공합니다. 그러나 열 이름을 입력 매개변수로 사용하는 데에는 제한이 있습니다.

질문:

열 이름을 preparedStatement의 입력 매개변수로 전달할 수 있습니까?

답변:

아니요, JDBC는 열 이름을 preparedStatements의 입력 매개변수로 설정하는 것을 허용하지 않습니다. ReadyStatements는 열 이름과 같은 메타데이터가 아닌 값만 허용하도록 설계되었습니다.

예:

다음 예를 고려하세요.

테이블:

  • 테이블 A: 속성 X 기타
  • 테이블 B: 속성 Y 기타

쿼리:

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿