Computer >> 컴퓨터 >  >> 프로그램 작성 >> MySQL

JDBC에서 PreparedStatement란 무엇입니까?

<시간/>

PreparedStatement 인터페이스는 여러 번 실행할 수 있는 미리 컴파일된 SQL 문을 나타내는 문 인터페이스를 확장합니다. 이것은 매개변수화된 SQL 쿼리를 허용하며 이 쿼리에 0개 이상의 매개변수를 전달할 수 있습니다.

처음에 이 문은 자리 표시자 “?”를 사용합니다. 매개변수 대신 나중에 PreparedStatement의 setXXX() 메서드를 사용하여 매개변수에 동적으로 인수를 전달할 수 있습니다. 인터페이스.

PreparedStatement 생성

PreparedStatement의 개체를 만들 수 있습니다. (인터페이스) prepareStatement() 사용 Connection 인터페이스의 메소드. 이 메서드는 쿼리(매개변수화됨)를 수락하고 PreparedStatement 개체를 반환합니다.

이 메서드를 호출하면 Connection 개체가 주어진 쿼리를 데이터베이스에 보내 컴파일하고 저장합니다. 쿼리가 성공적으로 컴파일되면 개체만 반환됩니다.

쿼리를 컴파일하기 위해 데이터베이스에 값이 필요하지 않으므로 (0개 이상) 자리 표시자를 사용할 수 있습니다. (물음표 ” ?” ) 쿼리의 값 대신

예를 들어 Employee라는 테이블이 있는 경우 데이터베이스에서 다음 쿼리를 사용하여 생성되었습니다.

CREATE TABLE Employee(Name VARCHAR(255), Salary INT NOT NULL, Location VARCHAR(255));

그런 다음 아래와 같이 Prepared Statement를 사용하여 값을 삽입할 수 있습니다.

//Creating a Prepared Statement
String query="INSERT INTO Employee(Name, Salary, Location)VALUES(?, ?, ?)";
Statement pstmt = con.prepareStatement(query);

자리 표시자에 값 설정

PreparedStatement 인터페이스는 setInt(), setFloat(), setArray(), setDate(), setDouble() 등과 같은 여러 setter 메서드를 제공하여 준비된 문의 자리 표시자에 값을 설정합니다.

이 메소드는 두 개의 인수를 허용합니다. 하나는 장소 폴더의 배치 인덱스를 나타내는 정수 값이고, 다른 하나는 특정 위치에 삽입해야 하는 값을 나타내는 int 또는, String 또는, float 등입니다.

아래와 같이 setter 메서드를 사용하여 위에서 만든 문의 자리 표시자에 값을 설정할 수 있습니다.

pstmt.setString(1, "Amit");
pstmt.setInt(2, 3000);
pstmt.setString(3, "Hyderabad");

pstmt.setString(1, "Kalyan");
pstmt.setInt(2, 4000);
pstmt.setString(3, "Vishakhapatnam");

pstmt.setString(1, "Renuka");
pstmt.setInt(2, 5000);
pstmt.setString(3, "Delhi");

pstmt.setString(1, "Archana");
pstmt.setInt(2, 15000);
pstmt.setString(3, "Mumbai");

준비된 명령문 실행

PreparedStatement 객체를 생성했으면 execute() 중 하나를 사용하여 실행할 수 있습니다. PreparedStatement 인터페이스의 메소드, 즉 execute() , 업데이트 실행 그리고, executeQuery().

  • 실행(): 이 메서드는 현재 준비된 문 개체에서 일반 정적 SQL 문을 실행하고 부울 값을 반환합니다.

  • 실행 쿼리(): 이 메소드는 현재 준비된 명령문을 실행하고 ResultSet 객체를 반환합니다.

  • 업데이트 실행(): 이 메서드는 현재 준비된 문에서 삽입 업데이트 또는 삭제와 같은 SQL DML 문을 실행합니다. 영향을 받는 행 수를 나타내는 정수 값을 반환합니다.

위에서 생성한 준비된 문을 아래와 같이 실행할 수 있습니다.

예시

이 예에서는 준비된 명령문을 사용하여 Employees라는 테이블에 값을 삽입하려고 합니다.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class PreparedStatementExample {
   public static void main(String args[]) throws SQLException {
      //Registering the Driver
      DriverManager.registerDriver(new com.mysql.jdbc.Driver());

      //Getting the connection
      String mysqlUrl = "jdbc:mysql://localhost/testdb";
      Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
      System.out.println("Connection established......");

      //Creating a Prepared Statement
      String query = "INSERT INTO Employees(Name, Salary, Location) VALUES (?, ?, ?)";
      PreparedStatement pstmt = con.prepareStatement(query);

      pstmt.setString(1, "Amit");
      pstmt.setInt(2, 3000);
      pstmt.setString(3, "Hyderabad");

      pstmt.setString(1, "Kalyan");
      pstmt.setInt(2, 4000);
      pstmt.setString(3, "Vishakhapatnam");

      pstmt.setString(1, "Renuka");
      pstmt.setInt(2, 5000);
      pstmt.setString(3, "Delhi");

      pstmt.setString(1, "Archana");
      pstmt.setInt(2, 15000);
      pstmt.setString(3, "Mumbai");

      int num = pstmt.executeUpdate();
      System.out.println("Rows inserted ....");
   }
}

출력

Connection established......
Number of rows inserted: 1

데이터베이스를 확인하면 다음과 같이 테이블에 삽입된 값을 관찰할 수 있습니다.

+---------+--------+----------------+
| Name    | Salary | Location       |
+---------+--------+----------------+
| Amit    | 30000  | Hyderabad      |
| Kalyan  | 40000  | Vishakhapatnam |
| Renuka  | 50000  | Delhi          |
| Archana | 15000  | Mumbai         |
+---------+--------+----------------+
5 rows in set (0.00 sec)