Rate this post

PreparedStatement trong Java là một lớp được cung cấp bởi Java Database Connectivity (JDBC) API, nó cung cấp một cách để thực hiện các truy vấn SQL với các tham số được truyền vào.

Các bài viết liên quan:

PreparedStatement giúp cho việc truy vấn trong Java trở nên an toàn hơn vì nó chống lại tấn công SQL injection bằng cách chuẩn bị câu truy vấn trước khi truyền tham số vào, và tự động chuyển đổi giữa các kiểu dữ liệu khác nhau.

Ví dụ sử dụng PreparedStatement:

String sql = "INSERT INTO users (name, age) VALUES (?, ?)";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setString(1, "John");
statement.setInt(2, 30);
statement.executeUpdate();

Trong ví dụ trên, chúng ta đang tạo một PreparedStatement với câu truy vấn SQL để thêm mới một người dùng vào bảng users. Các tham số “John” và 30 sẽ được thay thế vào các dấu hỏi trong câu truy vấn bằng setString() và setInt() method tương ứng. Điểu này giúp tránh tấn công SQL injection bởi các tham số được chuẩn bị sẵn trước khi truyền vào câu truy vấn, và giúp cho việc quản lý dữ liệu trong Java trở nên dễ dàng hơn.

Cách sử dụng preparedstatement trong java

Sử dụng PreparedStatement trong Java có một số bước chính:

  1. Tạo kết nối đến cơ sở dữ liệu: Để sử dụng PreparedStatement, chúng ta cần tạo một kết nối đến cơ sở dữ liệu bằng cách sử dụng DriverManager.getConnection() method.
  2. Tạo PreparedStatement: Sử dụng Connection.prepareStatement() method để tạo một PreparedStatement với câu truy vấn SQL cần thiết.
  3. Truyền tham số: Sử dụng các method setXXX() của PreparedStatement để truyền tham số vào câu truy vấn, ví dụ như setString(), setInt(), v.v.
  4. Thực thi truy vấn: Sử dụng PreparedStatement.executeUpdate() hoặc PreparedStatement.executeQuery() để thực thi truy vấn.
  5. Đóng kết nối: Đóng kết nối sau khi hoàn tất truy vấn bằng cách gọi PreparedStatement.close() và Connection.close()
String sql = "INSERT INTO users (name, age) VALUES (?, ?)";
try (Connection connection = DriverManager.getConnection("jdbc:...");
     PreparedStatement statement = connection.prepareStatement(sql)) {
    statement.setString(1, "John");
    statement.setInt(2, 30);
    statement.executeUpdate();
} catch (SQLException e) {
   
	// Xử lý lỗi
}

Trong ví dụ trên, chúng ta đã tạo một kết nối đến cơ sở dữ liệu bằng DriverManager.getConnection(), sau đó tạo một PreparedStatement với câu truy vấn SQL để thêm mới một người dùng vào bảng users. Các tham số “John” và 30 sẽ được thay thế vào các dấu hỏi trong câu truy vấn bằng setString() và setInt() method tương ứng. Trong try-with-resources statement, nó sẽ tự động đóng kết nối sau khi thực thi truy vấn và không cần gọi PreparedStatement.close() và Connection.close() explicit. Cần lưu ý rằng, trong một số trường hợp, chúng ta có thể cần sử dụng PreparedStatement.execute() method để thực thi truy vấn, nó sẽ trả về một boolean giá trị cho biết truy vấn có thực thi thành công hay không.

ví dụ preparedstatement trong java với select, update, delete

Ví dụ sử dụng PreparedStatement với câu truy vấn SELECT:

String sql = "SELECT * FROM users WHERE name = ? AND age > ?";
try (Connection connection = DriverManager.getConnection("jdbc:...");
     PreparedStatement statement = connection.prepareStatement(sql)) {
    statement.setString(1, "John");
    statement.setInt(2, 25);
    ResultSet resultSet = statement.executeQuery();
    while (resultSet.next()) {
        System.out.println(resultSet.getString("name") + " " + resultSet.getInt("age"));
    }
} catch (SQLException e) {
    // Xử lý lỗi
}

Ví dụ sử dụng PreparedStatement với câu truy vấn UPDATE:

String sql = "UPDATE users SET age = ? WHERE name = ?";
try (Connection connection = DriverManager.getConnection("jdbc:...");
     PreparedStatement statement = connection.prepareStatement(sql)) {
    statement.setInt(1, 35);
    statement.setString(2, "John");
    int rowsAffected = statement.executeUpdate();
    System.out.println(rowsAffected + " rows affected.");
} catch (SQLException e) {
    // Xử lý lỗi
}

Ví dụ sử dụng PreparedStatement với câu truy vấn DELETE:

String sql = "DELETE FROM users WHERE name = ?";
try (Connection connection = DriverManager.getConnection("jdbc:...");
     PreparedStatement statement = connection.prepareStatement(sql)) {
    statement.setString(1, "John");
    int rowsAffected = statement.executeUpdate();
    System.out.println(rowsAffected + " rows deleted.");
} catch (SQLException e) {
    // Xử lý lỗi
}

Trong các ví dụ trên, chúng ta sử dụng PreparedStatement để thực hiện các truy vấn SELECT, UPDATE, DELETE với tham số được truyền vào. Cần lưu ý rằng, trong trường hợp SELECT, chúng ta sử dụng PreparedStatement.executeQuery() để thực thi truy vấn, và trong trường hợp UPDATE, DELETE chúng ta sử dụng PreparedStatement.executeUpdate() để thực thi truy vấn. Kết quả trả về của các truy vấn sẽ khác nhau, ví dụ như truy vấn SELECT trả về một ResultSet chứa kết quả truy vấn, truy vấn UPDATE và DELETE trả về số dòng bị ảnh hưởng bởi truy vấn.

Cần lưu ý rằng, trong một số trường hợp, chúng ta cũng có thể sử dụng Statement để thực thi các truy vấn, tuy nhiên, việc sử dụng PreparedStatement sẽ là tốt hơn vì nó giúp cho việc truy vấn trở nên an toàn hơn và dễ quản lý hơn.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Contact Me on Zalo
Call now