So sánh Statement với PreparedStatement, CallableStatement trong JDBC – Java
Statement, PreparedStatement và CallableStatement là 3 loại interace thực thi câu lệnh truy vấn SQL trong JDBC API, trong đó:
- Statement – Sử dụng để thực hiện các câu truy vấn SQL tĩnh
- PreparedStatement – Sử dụng để thực hiện các câu truy vấn SQL động hoặc có tham số
- CallableStatement – Sử dụng để thực thi các stored procedures (Hiểu nôm na là các lệnh định nghĩa sẵn trên database)
Cả 3 interface trên cùng thực hiện công việc khá giống nhau tuy nhiên mỗi loại nên được sử dụng trong từng trường hợp để nâng cao hiệu năng.
So sánh Statement với PreparedStatement, CallableStatement trong JDBC – Java
Statement
Statement được sử dụng để thực thi các câu lệnh SQL tĩnh, chúng ta không thể truyền tham số vào câu SQL trong thời gian runtime.
Statement có hiệu năng (performance) kém hơn PrepareStatement và CallableStatement .
Statement thường được sử dụngtrong trường hợp câu lệnh SQL chỉ chạy 1 lần, ví dụ sử dụng để thực thi các câu SQL định nghĩa cơ sở dữ liệu – DDL (Data Denifition Language) như CREATE, ALTER, DROP…
Ví dụ:
String sql = "CREATE TABLE user_info (" +
" id int(11) NOT NULL AUTO_INCREMENT," +
" name varchar(45) DEFAULT NULL," +
" email varchar(100) DEFAULT NULL," +
" address varchar(255) DEFAULT NULL," +
" date_of_birth datetime DEFAULT NULL," +
" PRIMARY KEY (id)" +
")";
Connection con = connectionUtils.getConnection();
Statement stmt = con.createStatement();
stmt.execute(sql);
PreparedStatement
PreparedStatement được sử dụng để thực thi các câu truy vấn SQL động hoặc có tham số.
PreparedStatement thừa kế từ Statement nhưng nó cho phép truyền các tham số vào câu SQL trong thời gian run time.
PreparedStatement được khuyên sử dụng trong trường hợp câu SQL được sử dụng nhiều lần.
Ví dụ câu lệnh INSERT được dùng lại nhiều lần để insert 1 danh sách user vào database.
Ví dụ mình tạo một stored procedures thực hiện lấy user theo id:
CREATE PROCEDURE getUserById(IN idUser int) BEGIN SELECT * FROM user_info WHERE id = idUser; END
Bây giờ mình sẽ sử dụng CallableStatement để gọi câu stored procedures bên trên:
Truyền id = 1 vào stored procedures getUserById và trả kết quả về ResultSet
String sql = "CALL getUserById(?);"; CallableStatement cs = con.prepareCall(sql); cs.setInt(1, 1); cs.executeQuery(); ResultSet rs = cs.getResultSet(); while (rs.next()) { System.out.println(rs.getInt(1) + " " + rs.getString(2) + " " + rs.getString(3)); }
Okay, Done!
Thanks các bạn đã theo dõi bài viết!
References:
http://javaconceptoftheday.com/statement-vs-preparedstatement-vs-callablestatement-in-java/