Java ReadyStatement 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 작업을 효율적으로 관리하는 데 필요한 유연성을 제공합니다. 신뢰할 수 없는 출처에서 오는 경우 SQL 주입 취약점을 방지하려면 tableName
을 정리하는 것을 잊지 마세요.
위 내용은 Java ReadyStatement INSERT에서 변수 테이블 이름을 어떻게 사용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!