JDBC Statement trong java: Statement, PrepareStatement và CallableStatement
So sánh Statement với PreparedStatement và CallableStatement trong JDBC Java
Nếu bạn chưa biết JDBC là gì tham thảo bài viết này trước nhé!
JDBC Statement trong java dùng để làm gì?
Khi một kết nối được thiết lập, chúng ta có thể tương tác với cơ sở dữ liệu. JDBC Statement, PreparedStatement và CallableStatement định nghĩa những phương thức và thuộc tính, cho phép chúng ta thực thi câu lệnh SQL và nhận dữ liệu từ cơ sở dữ liệu của bạn, trong đó:
- Statement – Sử dụng để thực hiện các câu truy vấn SQL tĩnh, không có tham số.
- 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.
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ụng trong 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ụ Statement:
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);
Lưu ý:
- boolean execute (String SQL): Trả về giá trị true nếu thực thi thành công câu lệnh SQL; ngược lại sẽ trả về giá trị false. Sử dụng phương thức này để thực thi các câu lệnh SQL DDL như tạo cơ sở dữ liệu, tạo bảng, …
- int executeUpdate (String SQL): Trả về số dòng bị tác động khi thực thi các câu lệnh như INSERT, UPDATE hoặc DELETE.
- ResultSet executeQuery (String SQL): Trả về một đối tượng ResultSet khi bạn thực thi câu lệnh SELECT.
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.
List<User> listUser = new ArrayList<User>();
listUser.add(new User(1, "Messi", "Argentina"));
listUser.add(new User(2, "Ronaldo", "Brazil"));
listUser.add(new User(3, "Rooney", "England"));
String sql = "INSERT INTO user_info (id, name, address) VALUES (?, ?, ?);";
PreparedStatement pstmt = con.prepareStatement(sql);
for (User user : listUser)
pstmt.setInt(1, user.getId());
pstmt.setString(2, user.getName());
pstmt.setString(3, user.getAddress());
pstmt.execute();
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));
Xong. Trên đây là Cách dùng Statement, PrepareStatement và CallableStatement trong JDBC Java có ví dụ đơn giản nhất!
Học hành, Lập trình
Java, Lập trình
0 comments:
Post a Comment