Giao diện PreparedStatement trong JDBC

Một phần của tài liệu Bài Giảng Lập Trình Java - Đại Học Thủy Lợi.pdf (Trang 283 - 288)

Giao diện PreparedStatement là một giao diện con của Statement. Nó được sử dụng để thực thi các truy vấn được tham số hóa. Ví dụcâu lệnh sau:

String sql="INSERT INTO ten.bang values(?,?,?)";

Nhưbạn thấy, chúng ta đang truyền các tham số cho values. Giá trị của nó sẽ được thiết lập bằng việc gọi phương thức setter (ví dụ như setShort, setstring,...) của PreparedStatement. Đối tượngPreparedStatement là một đối tượngmà biểu diễn một lệnh SQL được biên dịch trước. Tức là, một lệnh SQL được biên dịch trước và được lưu trữ trong một đối tượng PreparedStatement. Đối tượng này sau đó có thể được sử dụng để thực thi có hiệu quả Statement này nhiều lần.

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

7.10.1. Tạo đối tượng PreparedStatement trong JDBC

Phương thức PrepareStatement() của giao diện Connection được sử dụng để trả về đối tượng PreparedStatement. Dưới đây là cú pháp chung:

public PreparedStatement prepareStatementfString queryjthrows SQLException{}

Đe tạo đối tượng PreparedStatement, bạn có thế theo mẫu chung sau:

PreparedStatement pstmt = null;

try{

String SQL = "UPDATE sinhvienkóO SET diemthi=? WHERE mssv=?";

pstmt = conn.prepareStatement(SQL);

}

catch (SQLException e) {

}

finally {

}__________________________________________________________________

Tất cả tham số trong JDBC được biểu diễn bời biểu tượng ? (còn được biết với tên gọi là Parameter Marker). Bạn phải cung cấp các giá trị cho mồi tham số trước khi thực thi lệnh SQL. Phương thức setxxxo gắn kết các giá trị tới các tham số, trong đó XXX biểu diễn kiểu dữ liệu trong Java của giá trị mà bạn muốn gắn kết cho tham số đầu vào. Nếu bạn quên cung cấp các giá trị, thì bạn sẽ nhận một SQLException.

7.10.2. Các phương thức của giao diện PreparedStatement

Dưới đây là một số phương thức quan trọngcủa giao diện PreparedStatement:

- public void setlnt(int paramindex, int giaTri):

Thiết lập tham số đã cho tới giá trị nguyên trong Java đã cung cấp. Trình điều khiến sẽ chuyển đổi giá trị này thành một giá trị nguyên trong SQL khi nó gửi giá trị tới Database. Trong đó, paramlndex là tham số đầu tiên, tham số thứ hai,...; giaTri là giá trị của tham số.

- public void setString(int paramindex,String giaTri):

Thiếtlập tham số đã cho thành giá trị String trong Java đã cung cấp. Trình điều khiển chuyểnđổi giá trị này thành một kiểu VARCHAR hoặc LONGVARCHAR (tùy thuộcvào kích cỡ tham số) khinó gửi giá trị tới Database. (Miêu tảvề tham số như trên.)

-public void setFloat(int paramindex,float giaTri):

Thiết lập tham số đã cho thành giá trị float trong Java đã cung cấp. Trình điềukhiển chuyển đổi giá trị này thành một giá trị REAL trong SQL khi nó gửi giá trị tới Database.

(Miêutả về tham số như trên.)

- public void setDouble(int paramindex, double giaTri):

Thiết lập tham số đã cho thành giá trị double trong Java đã cung cấp. Trình điều khiển chuyển đổi giá trị này thành một giá trị DOUBLE trong SQL khi nó gửi giá trị tới Database. (Miêutả về tham số như trên.)

-public int executeUpdate():

Thực thi truy vấn SQL trong đối tượng PreparedStatement này, mà phải là một lệnh DML (lệnh thao tácdữ liệu) trong SQL như INSERT, UPDATE hoặc DELETE, hoặc một lệnh SQL mà không trả về bất cứ cái gì, chẳng hạn như một lệnh DDL (như CREATE, ALTER,...).

- public ResultSet executeQueryO throws SQLException:

Thực thi truy van SQL trong đối tượng PreparedStatement này và trả về đối tượng ResultSet được tạo bời truy vấn. Phưong thức này ném ngoại lệ SQLException và SQLTimeoutException.

7.10.3. Đóng đối tượng PreparedStatement trong JDBC

Giống như khi bạn đóng đối tượng Statement, bạn sử dụng phương thức close(). Tất nhiên, nếu bạn đóng đối tượng Connection, thì nó cũng sẽ đóng đối tượng PreparedStatement. Tuy nhiên, việc đóng đối tượng PreparedStatement một cách tường minh sẽ luôn luôn là một việc thực hành tốt đểđảm bảo chắc chắn rằng đối tượng đã được đóng và tài nguyên đã được giải phóng.

Dưới đây là mẫu chung đế đóng đốitượng PreparedStatement:

PreparedStatement pstmt = null;

try{

String SQL = "UPDATE sinhvienkóO SET diemthi=? WHERE mssv=?";

pstmt = conn.prepareStatement(SQL);

}

catch (SQLException e) {

}

finally {

pstmt.closeQ;

}

7.10.4. Ví dụ về đối tượng PreparedStatement trong JDBC

Chương trình 7.5 minh họa cách sử dụng giao diện PreparedStatement trong JDBC với cơ sở dữ liệu MySQL.

Chương trình 7.5

//Buoc 1: Ban can importcacgoi can thiet import java.sql.*;

public class JDBCPreparedStatement {

11 Ten cua driver vadia chi URL cuaco so du lieu

static final StringJDBC-DRIVER= "com.mysql.jdbc.Driver";

static final String DB-URL = "jdbc:mysql://localhost/sinhvien";

// Ten nguoi dung va matkhau cua co so du lieu static final String USER = "root";

static final String PASS = "123456";

public static void main(String[] args) { Connection conn = null;

PreparedStatementstmt= null;

try{

// Buoc 2: Dang ky Driver

Class.forNamef'com.mysqLjdbc.Driver");

11Buoc 3: Momot ket noi

System.out.printlnf'Dang ket noitoi co so du lieu...");

conn= DriverManager.getConnection(DB_URL,USER,PASS);

11Buoc 4: Thue thitruy van

System.out.printlnf'Tao cac lenh truy van SQL...");

Stringsql = "UPDATE sinhvienkóO SET diemthi=? WHERE mssv=?";

stmt = conn.prepareStatement(sql);

11Gan ket cac gia trivao trong cac tham so.

stmt.setlntfl, 6); // Lenh nay se thiet lap diemthi stmt.setlnt(2,1); // Lenh nay se thiet lapmssv 11Bay gio cap nhat diem thicua ban ghico mssv=l;

introws - stmt.executeUpdatef);

System.out.printlnf'So hang bi tac dong:" + rows);

// Lua chontat ca ban ghiva hien thi chung.

sql = "SELECT mssv, ho, ten, diemthi FROM sinhvienkóO";

ResultSetrs = stmt.executeQuery(sql);

// Buoc 5: Laydulieutu ResultSet while(rs.next()){

// Laydulieu boi su dung ten cot int mssv = rs.getlntf'mssv");

int diemthi = rs.getlntf'diemthi");

Stringho = rs.getStringf'ho");

String ten =rs.getStringf'ten");

// Hien thi cac gia tri

System.out.print("\nMSSV: " + mssv);

System.out.print("\nHo:" + ho);

System.out.println("\nTen: " + ten);

System.out.print("\nDiem Thi:" + diemthi);

System. out.print("\n=================");

}

// Buoc 6: Don sach moi truong va giaiphongresource rs.closeQ;

stmt.closeQ;

conn.closeQ;

}catchfSQLException se) { // Xu lycac loi cho JDBC se.printStackTraceQ;

} catchfException e) {

// Xu lycac loi cho Class.forName e.printStackT race0;

} finally {

11Khoi finally duoc sudung de dong cacresource try{

if (stmt!=null) stmtcloseQ;

} catchfSQLException se2) {}

try{

if (conn!=null) conn.closeQ;

} catch(SQLException se) { se.printStackTraceQ;

}// Ket thuc khoi finally }//Ket thuc khoi try }// Ketthucmain

}// Ket thuc JDBCPreparedStatement

Một phần của tài liệu Bài Giảng Lập Trình Java - Đại Học Thủy Lợi.pdf (Trang 283 - 288)

Tải bản đầy đủ (PDF)

(408 trang)