>Java >java지도 시간 >준비된 문이 SQL 쿼리의 동적 열 이름을 처리할 수 있습니까?

준비된 문이 SQL 쿼리의 동적 열 이름을 처리할 수 있습니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-10 09:20:15214검색

Can Prepared Statements Handle Dynamic Column Names in SQL Queries?

동적 열 이름에 대해 준비된 문 사용

데이터베이스 쿼리 작업 시 동적 열 이름을 지정하려고 할 때 일반적인 딜레마가 발생합니다. 이 기사에서는 특히 Java를 사용하는 MySQL에서 준비된 문을 통해 변수 열 이름을 전달할 수 있는 가능성을 살펴봅니다.

챌린지 문

사용자가 준비된 문을 실행하려고 하면 열 이름은 문자열로 전달됩니다.

String columnNames = "d,e,f";
String query = "SELECT a,b,c,? FROM " + name + " WHERE d=?";
stmt = conn.prepareStatement(query);
stmt.setString(1, columnNames);
stmt.setString(2, "x");

그러나 결과 SQL 문은 열 이름을 리터럴의 일부로 표시합니다. 문자열:

SELECT a,b,c,'d,e,f' FROM some_table WHERE d='x'

그러나 원하는 출력은 열 이름을 별도의 열로 갖는 것입니다.

SELECT a,b,c,d,e,f FROM some_table WHERE d='x'

솔루션 토론

이러한 관행은 데이터베이스 설계에 결함이 있음을 나타냅니다. 이상적으로는 사용자가 열 이름을 인식해서는 안 됩니다. 더 나은 해결책은 대신 "열 이름"을 저장하기 위해 데이터베이스에 명시적인 열을 생성하는 것입니다.

안타깝게도 열 이름을 preparedStatement 값으로 설정하는 것은 불가능합니다. 준비된 문은 컬럼 값을 설정하는 데에만 사용할 수 있습니다.

부득이하게 변수 컬럼 이름을 사용하는 경우 입력을 삭제하고 SQL 문자열을 수동으로 구성해야 합니다. 여기에는 개별 열 이름을 인용하고 String#replace()를 사용하여 열 이름 내의 따옴표를 이스케이프하는 작업이 포함됩니다.

위 내용은 준비된 문이 SQL 쿼리의 동적 열 이름을 처리할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.