CallableStatement được sử dụng để gọi các stored procedures và functions trong JDBC. Chúng ta có thể có logic nghiệp vụ trên cơ sở dữ liệu bằng cách sử dụng các stored procedures và function được lưu trữ trên csdl sẽ làm cho hiệu suất tốt hơn vì chúng được biên dịch trước.
Đ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>
Ví dụ gọi Stored procedure
Để gọi stored procedure, bạn cần tạo nó trong cơ sở dữ liệu. Ở đây, giả định rằng stored procedure, được lưu trữ trông như thế này.
create or replace procedure "INSERTR" (id IN NUMBER, name IN VARCHAR2) is begin insert into user420 values(id,name); end;
Cấu trúc bảng được đưa ra dưới đây
create table user420(id number(10), name varchar2(200));
Trong ví dụ này, chúng ta sẽ gọi stored procedure được lưu trữ INSERTR nhận id và tên làm tham số và chèn nó vào bảng user420. Lưu ý rằng bạn cũng cần tạo bảng user420 để chạy ứng dụng này.
import java.sql.*; public class Proc { public static void main(String[] args) throws Exception{ Class.forName("oracle.jdbc.driver.OracleDriver"); Connection con=DriverManager.getConnection( "jdbc:oracle:thin:@localhost:1521:xe","system","oracle"); CallableStatement stmt=con.prepareCall("{call insertR(?,?)}"); stmt.setInt(1,1011); stmt.setString(2,"Amit"); stmt.execute(); System.out.println("success"); } }
Ví dụ gọi function trong JDBC
Trong ví dụ này, chúng ta sẽ hàm sum4 nhận hai đầu vào và trả về tổng của một số đã cho. Ở đây, chúng ta đã sử dụng phương thức registerOutParameter của CallableStatement, đăng ký tham số đầu ra với kiểu tương ứng của nó.
Đầu tiên, tạo function sum4 trước.
create or replace function sum4 (n1 in number,n2 in number) return number is temp number(8); begin temp :=n1+n2; return temp; end;
Bây giờ, hãy viết chương trình đơn giản để gọi hàm
import java.sql.*; public class FuncSum { public static void main(String[] args) throws Exception{ Class.forName("oracle.jdbc.driver.OracleDriver"); Connection con=DriverManager.getConnection( "jdbc:oracle:thin:@localhost:1521:xe","system","oracle"); CallableStatement stmt=con.prepareCall("{?= call sum4(?,?)}"); stmt.setInt(2,10); stmt.setInt(3,43); stmt.registerOutParameter(1,Types.INTEGER); stmt.execute(); System.out.println(stmt.getInt(1)); } }
Output: 53
Nguồn
https://www.javatpoint.com/CallableStatement-interface
https://www.tutorialspoint.com/jdbc/callablestatement-object-example.htm