PreparedStatement 작업

사용 가능

진술의 유형

우리는 이미 가장 간단한 Statement 인터페이스를 보았습니다 . 작업에는 매우 적합하지만 복잡한 쿼리에는 적합하지 않습니다. 일부 출처에서는 Statement를 전혀 사용할 필요가 없다는 의견이 있습니다 . 대신 더 복잡하고 기능적으로 풍부한 인터페이스가 적합합니다.

  • 준비된 진술
  • CallableStatement

꽤 합리적인 질문이 생깁니다. 이러한 인터페이스가 필요한 이유는 무엇입니까? 알아 봅시다.

먼저, PreparedStatement 인터페이스 와 기타 JDBC 기능을 살펴보겠습니다 . 나중에 CallableStatement 인터페이스 로 넘어갈 것입니다. 첫 번째로 그 사용은 그다지 일반적이지 않으며 두 번째로 그것에 대해 모든 것을 고려한 후에 대화가 이미 상당히 짧아 질 수 있습니다.

또한 PreparedStatement는 SQL 주입이라는 데이터베이스 해킹에 대한 대중적인 접근 방식에서 큰 도움이 됩니다.

그러나 조금 후에 더 자세히 설명합니다.

준비된 진술

PreparedStatement 라는 이름을 번역하려고 하면 "prepared statement"와 같은 결과를 얻을 수 있습니다. 여기서 가장 중요한 단어는 "준비"입니다. "준비"란 무엇입니까?

이 문제를 고려하기 전에 매우 자주 발생하는 편의성의 관점에서 다소 중요한 점을 볼 것을 제안합니다. 따라서 일부 애플리케이션에서는 연락처 데이터를 CONTACT 테이블에 삽입해야 합니다. 이렇게 하려면 다음과 같은 쿼리를 준비해야 합니다.

INSERT INTO JC_CONTACT (FIRST_NAME, LAST_NAME, PHONE, EMAIL) VALUES (‘Harry’,'Potter','+79112345678','harry@example.com);

언뜻보기에 모든 것이 그렇게 어렵고 무섭지 않은 것 같습니다. 이름, 성, 주소 및 전화 번호와 같은 매개 변수에서 필요한 문자열을 수집하는 코드를 작성해야 합니다. 모든 문자열 데이터를 작은따옴표 문자로 묶어야 한다는 점만 기억하면 됩니다.

별도의 함수에서 이 작업을 수행하면 다음과 같은 결과를 얻습니다.

public String buildInsert(String firstName,, String lastName, String phone, String email) {
    String sql = "INSERT INTO JC_CONTACT (FIRST_NAME, LAST_NAME, PHONE, EMAIL)+VALUES ('" + firstName + "','" + lastName + "','" + phone + "','" + email + ")";
    return sql;
}

이름, 성, 전화 번호 및 주소를 형식의 매개 변수 함수에 전달하고 이들로부터 SQL 쿼리 문자열을 구성합니다. 따옴표는 그림을 약간 망치지만 지금까지는 무섭지 않습니다.

좋아, 숫자는 어때? 따옴표로 묶을 필요가 없습니다. Opanki, 어떤 경우에는 따옴표가 필요하고 다른 경우에는 필요하지 않습니다. 상황은 더욱 복잡해지고 있습니다.

이제 문제를 하나 더 추가해 보겠습니다. 문자열 내부에 일반 따옴표(하나도 아님)가 있으면 어떻게 됩니까? 먼저 그러한 견적을 찾아 처리해야 합니다. 음. 어쩐지 우리는 불편함을 느끼기 시작합니다.

이제 날짜 처리를 추가하면 작업이 완전히 지루해집니다. 엄청난 양의 작업을 수행해야 합니다. 날짜는 일반적으로 불쾌합니다. 다른 SQL 서버는 날짜에 대해 다른 형식을 허용합니다.

그래서 우리는 무엇을 봅니까? 쿼리 내에서 매개 변수를 사용해야 하는 경우 쿼리를 수동으로 작성하는 것은 매우 불편합니다. 그리고 불쾌할 뿐만 아니라 지루하다고 말할 수도 있습니다. 고려해야 할 사례가 엄청나게 많고 이것은 매우 지루한 작업입니다. 기본적으로 이러한 경우에 PreparedStatement 인터페이스가 제안되었습니다 .

이 요청을 통해 다음 두 가지 작업을 수행할 수 있습니다.

  • 매개변수가 대체될 위치를 나타내는 요청을 미리 준비하십시오.
  • 특정 유형의 매개변수를 설정한 후 이미 설정된 매개변수로 쿼리 실행

PreparedStatement 예

매개 변수 설정 옵션에 대한 PreparedStatement 의 구조는 다음과 같습니다.

// Example variables
String firstName = "Harry";
String lastName = "Potter";
String phone = "+12871112233";
String email = "harry@example.com";

// Request with indication of places for parameters in the form of "?"
String sql = "INSERT INTO JC_CONTACT (FIRST_NAME, LAST_NAME, PHONE, EMAIL) VALUES (?, ?, ?, ?)";

// Create a request. The con variable is an object of type Connection
PreparedStatement stmt = con.prepareStatement(sql);

// Set parameters
stmt.setString(1, firstName);
stmt.setString(2, lastName);
stmt.setString(3, phone);
stmt.setString(4, email);

// Execute the request
stmt.executeUpdate();

보시다시피 모든 것이 아주 간단합니다.

첫째, SQL 쿼리를 작성할 때 매개변수를 대체해야 하는 위치는 물음표("?")로 작성됩니다.

둘째, 요청은 con.prepareStatement() 를 호출하여 생성됩니다 .

셋째, 매개 변수 설정은 숫자와 값의 표시를 거칩니다. 배열 및 컬렉션 작업을 할 때 사용했던 것처럼 매개변수의 수는 0이 아닌 1부터 시작한다는 점에 유의하십시오.

PreparedStatement 인터페이스에는 문자열을 설정하는 메서드( setString() , 숫자를 설정하는 메서드 — setInt() , setLong() , setDouble() ) , 날짜를 설정하는 메서드 — setDate() 가 포함되어 있습니다 . 그리고 더 복잡한 유형 - 이것은 문서에서 볼 수 있습니다.

넷째, stmt.executeUpdate() 에 대한 호출은 쿼리 문자열을 지정하지 않고 이미 실행되었습니다.

저는 PreparedStatement 와 친구를 사귈 것을 강력히 추천합니다 . 이것은 매우 효과적인 도구입니다.

코멘트
  • 인기
  • 신규
  • 이전
코멘트를 남기려면 로그인 해야 합니다
이 페이지에는 아직 코멘트가 없습니다