Computer >> Máy Tính >  >> Lập trình >> MySQL

PreparedStatement trong JDBC là gì?

Câu lệnh chuẩn bị giao diện mở rộng giao diện Statement nó đại diện cho một câu lệnh SQL được biên dịch trước có thể được thực thi nhiều lần. Điều này chấp nhận các quy tắc SQL được tham số hóa và bạn có thể chuyển 0 hoặc nhiều tham số cho truy vấn này.

Ban đầu, câu lệnh này sử dụng các trình giữ chỗ “?” thay vì tham số, sau này, bạn có thể truyền động các đối số cho các đối số này bằng cách sử dụng các phương thức setXXX () của PreparedStatement giao diện.

Tạo câu lệnh chuẩn bị sẵn

Bạn có thể tạo một đối tượng của Chuẩn bị sẵn sàng (giao diện) bằng cách sử dụng Chuẩn bị () phương thức của giao diện Kết nối. Phương thức này chấp nhận một truy vấn (được tham số hóa) và trả về một đối tượng PreparedStatement.

Khi bạn gọi phương thức này, đối tượng Connection sẽ gửi truy vấn đã cho đến cơ sở dữ liệu để biên dịch và lưu nó. Nếu truy vấn được biên dịch thành công thì chỉ nó trả về đối tượng.

Để biên dịch một truy vấn, cơ sở dữ liệu không yêu cầu bất kỳ giá trị nào để bạn có thể sử dụng (không hoặc nhiều hơn) trình giữ chỗ (Dấu chấm hỏi ”?” ) ở vị trí của các giá trị trong truy vấn.

Ví dụ:nếu bạn có một bảng có tên Nhân viên trong cơ sở dữ liệu, được tạo bằng truy vấn sau.

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

Sau đó, bạn có thể sử dụng Câu lệnh chuẩn bị để chèn các giá trị vào nó như được hiển thị bên dưới.

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

Đặt giá trị cho phần giữ chỗ

Câu lệnh chuẩn bị interface cung cấp một số phương thức setter như setInt (), setFloat (), setArray (), setDate (), setDouble (), v.v. để đặt giá trị cho các trình giữ chỗ của câu lệnh đã chuẩn bị.

Các phương thức này chấp nhận hai đối số, một là giá trị số nguyên đại diện cho chỉ số vị trí của thư mục địa điểm và đối số kia là int hoặc, String hoặc, float, v.v. đại diện cho giá trị bạn cần chèn tại vị trí cụ thể đó.

Bạn có thể đặt giá trị cho các trình giữ chỗ của câu lệnh đã tạo ở trên bằng cách sử dụng các phương thức setter như được hiển thị bên dưới:

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");

Thực thi Tuyên bố đã Chuẩn bị

Khi bạn đã tạo đối tượng PreparedStatement, bạn có thể thực thi nó bằng cách sử dụng một trong các lệnh execute () các phương thức của giao diện PreparedStatement, cụ thể là execute () , executeUpdate () và, executeQuery ().

  • thực thi (): Phương thức này thực thi các câu lệnh SQL tĩnh bình thường trong đối tượng câu lệnh được chuẩn bị sẵn hiện tại và trả về một giá trị boolean.

  • executeQuery (): Phương thức này thực thi câu lệnh đã chuẩn bị hiện tại và trả về một đối tượng ResultSet.

  • executeUpdate (): Phương pháp này thực thi các câu lệnh SQL DML chẳng hạn như chèn cập nhật hoặc xóa trong câu lệnh Chuẩn bị sẵn hiện tại. Nó trả về một giá trị số nguyên đại diện cho số hàng bị ảnh hưởng.

Bạn có thể thực hiện câu lệnh chuẩn bị đã tạo ở trên như được hiển thị bên dưới:

Ví dụ

Trong ví dụ này, chúng tôi đang cố gắng chèn các giá trị vào bảng có tên Nhân viên bằng cách sử dụng một câu lệnh đã chuẩn bị.

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 ....");
   }
}

Đầu ra

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

Nếu bạn xác minh cơ sở dữ liệu, bạn có thể quan sát các giá trị được chèn trong bảng như:

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