Tags:

Cách sử dụng PreparedStatement interface trong JDBC

PreparedStatement interface là một sub-interface của Statement được dùng để triển khai các câu truy vấn nhận các tham số đầu vào.

Hãy xem một ví dụ về câu truy vấn có tham số sau

String sql="insert into EMPLOYEE values(?,?,?)";  

Như bạn có thể thấy, các dấu (?) đại diện cho các tham số mà chúng ta phải truyền giá trị cho chúng. Giá trị của các tham số này sẽ được đặt bằng cách gọi các phương thức setter của PreparedStatement.

Tại sao lại sử dụng PreparedStatement?

PreparedStatement giúp tăng hiệu suất của ứng dụng bởi vì câu truy vấn chỉ được biên dịch một lần.

Làm thế nào để tạo ra PreparedStatement instance?

Chúng ta có thể tạo ra PreparedStatement instance thông qua prepareStatement() method của Connection interface.

public PreparedStatement prepareStatement(String query)

Các method thường sử dụng trong PreparedStatement

Các method dưới đây được sử dụng thường xuyên trong PreparedStatement, vì vậy chúng ta nên xem qua chúng

public void setInt(int paramIndex, int value) Đặt giá trị int cho một tham số tại vị trí paramIndex.
public void setString(int paramIndex, String value) Đặt giá trị String cho một tham số tại vị trí paramIndex.
public void setFloat(int paramIndex, float value) Đặt giá trị Float cho một tham số tại vị trí paramIndex.
public void setDouble(int paramIndex, double value) Đặt giá trị double cho một tham số tại vị trí paramIndex.
public int executeUpdate() Dùng để thực thi các câu query. Thường được dùng cho các câu truy vấn: create, drop, insert, update, delete etc.
public ResultSet executeQuery() Thực thi một câu truy vấn SELECT và trả về ResultSet.

Điều kiện tiên quyết

Hầu hết các ứng dụng Java hiện đây đều sử dụng Maven hoặc Gradle cho phép chúng ta dễ dàng quản lý các dependency, build source code etc. Vì vậy trong bài viết này mình sẽ sử dụng project maven để hướng dẫn.

Sau khi tạo project maven thành công, chúng ta cần thêm JDBC dependency tương ứng với cơ sở dữ liệu bạn muốn, ở đây mình sử dụng mysql.

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.13</version>
</dependency>

Tiếp theo, chúng ta sẽ cần tạo database dưới cơ sở dữ liệu MySQL theo lệnh sau

CREATE DATABASE `empl`;
CREATE TABLE `EMPLOYEE` (
  `ID` int NOT NULL AUTO_INCREMENT,
  `NAME` varchar(45) DEFAULT NULL,
  `SALARY` decimal(10,0) DEFAULT NULL,
  PRIMARY KEY (`ID`)
) 

Triển khai ví dụ

Trong phần này chúng ta sẽ cần nhau làm một ví dụ đơn giản dựa trên các kiến thức mà nảy giờ bài viết đã trình bày.

import java.math.BigDecimal;
import java.sql.*;

public class Main {

    private static final String DB_URL = "jdbc:mysql://localhost:3306/empl?serverTimezone=UTC&useSSL=false";
    private static final String USER = "root";
    private static final String PASS = "123456";

    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement stmt = null;
        try{
            //dang ky driver
            Class.forName("com.mysql.jdbc.Driver");

            // Mo ket noi
            System.out.println("Connecting to database...");
            conn = DriverManager.getConnection(DB_URL,USER,PASS);

            // thuc thi cau lenh update
            System.out.println("Creating statement...");
            String sql = "UPDATE EMPLOYEE set NAME=? WHERE ID=?";
            stmt = conn.prepareStatement(sql);

            // Gan gia tri cho cac tham so
            stmt.setString(1, "DEFT");
            stmt.setInt(2, 5);

            // Let us update age of the record with ID = 102;
            int rows = stmt.executeUpdate();
            System.out.println("Rows impacted : " + rows );

            // Let us select all the records and display them.
            sql = "SELECT ID, NAME, SALARY FROM EMPLOYEE";
            ResultSet rs = stmt.executeQuery(sql);

            while(rs.next()){

                int id  = rs.getInt("ID");
                String name = rs.getString("NAME");
                BigDecimal salary = rs.getBigDecimal("SALARY");

                //Display values
                System.out.print("ID: " + id);
                System.out.print(", NAME: " + name);
                System.out.print(", SALARY: " + salary);
                System.out.println();
                System.out.println("-------------------------------");
            }
            // Dong ket noi
            rs.close();
            stmt.close();
            conn.close();
        }catch(SQLException se){
            se.printStackTrace();
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            try{
                if(stmt!=null)
                    stmt.close();
            }catch(SQLException se2){
            }// nothing we can do
            try{
                if(conn!=null)
                    conn.close();
            }catch(SQLException se){
                se.printStackTrace();
            }
        }
    }

}

Output

Connecting to database...
Creating statement...
Rows impacted : 1
ID: 5, NAME: DEFT, SALARY: 10
-------------------------------
ID: 6, NAME: marry, SALARY: 20
-------------------------------
ID: 17, NAME: deft, SALARY: 100
-------------------------------
ID: 18, NAME: marrin, SALARY: 20
-------------------------------

Nguồn

https://www.javatpoint.com/PreparedStatement-interface

https://www.tutorialspoint.com/jdbc/preparestatement-object-example.htm

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x