Hướng dẫn java call stored procedure mysql - java cuộc gọi được lưu trữ thủ tục mysql

Trong hướng dẫn này, bạn sẽ tìm hiểu cách gọi các thủ tục lưu trữ MySQL từ JDBC bằng đối tượng Callablestatement.

Trước khi bạn bắt đầu

Để trình diễn, chúng tôi sẽ tạo một quy trình được lưu trữ mới có tên get_candidate_skill chấp nhận

CALL get_candidate_skill(122);

Code language: SQL (Structured Query Language) (sql)
0 là tham số trong và trả về một tập kết quả chứa các kỹ năng của ứng viên.

DELIMITER $$ CREATE PROCEDURE get_candidate_skill(IN candidate_id INT) BEGIN SELECT candidates.id, first_name,last_name, skills.name AS skill FROM candidates INNER JOIN candidate_skills ON candidates.id = candidate_skills.candidate_id INNER JOIN skills ON skills.id = candidate_skills.skill_id WHERE candidates.id = candidate_id; END$$ DELIMITER ;

Code language: SQL (Structured Query Language) (sql)

Hãy để Gọi quy trình được lưu trữ này cho ID ứng cử viên có giá trị 122.

CALL get_candidate_skill(122);

Code language: SQL (Structured Query Language) (sql)
Intucing để Callablestatement và lưu trữ thủ tục Cú pháp gọi
Hướng dẫn java call stored procedure mysql - java cuộc gọi được lưu trữ thủ tục mysql

Introducing to CallableStatement and stored procedure call syntax

Để gọi các quy trình được lưu trữ hoặc các chức năng được lưu trữ trong MySQL từ JDBC, bạn sử dụng đối tượng

CALL get_candidate_skill(122);

Code language: SQL (Structured Query Language) (sql)
1, được kế thừa từ đối tượng PreadStatement. Cú pháp chung của việc gọi một thủ tục được lưu trữ như sau:

{?= call procedure_name(param1,param2,...)}

Code language: SQL (Structured Query Language) (sql)

Bạn bọc cuộc gọi thủ tục được lưu trữ trong niềng răng ({}). Nếu quy trình được lưu trữ trả về một giá trị, bạn cần thêm dấu câu hỏi và bằng (? =) Trước từ khóa

CALL get_candidate_skill(122);

Code language: SQL (Structured Query Language) (sql)
2. Nếu một thủ tục được lưu trữ không trả về bất kỳ giá trị nào, bạn chỉ cần bỏ qua dấu

CALL get_candidate_skill(122);

Code language: SQL (Structured Query Language) (sql)
3. Trong trường hợp quy trình được lưu trữ chấp nhận bất kỳ tham số nào, bạn liệt kê chúng trong dấu ngoặc đơn mở và đóng sau tên thủ tục được lưu trữ.

Sau đây là các ví dụ về việc sử dụng cú pháp để gọi các thủ tục được lưu trữ trong các bối cảnh khác nhau:

Cú phápCửa hàng thủ tục
{& nbsp; Gọi quy trình_name ()}Chấp nhận không có tham số và trả về không có giá trị
{Gọi thủ tục_name (?,?)}Chấp nhận hai tham số và trả về không có giá trị
{? = Gọi thủ tục_name ()}Chấp nhận không có tham số và giá trị trả về
{? = Gọi thủ tục_name (?)}Chấp nhận một tham số và giá trị trả về

Lưu ý rằng câu hỏi đánh dấu trình giữ chỗ (?) Có thể được sử dụng cho cả các tham số trong, ra và inout. Để biết thông tin chi tiết về các loại tham số khác nhau trong các quy trình được lưu trữ, hãy xem hướng dẫn tham số thủ tục lưu trữ MySQL.

Ví dụ về thủ tục lưu trữ JDBC MySQL

Đầu tiên, hãy mở kết nối với máy chủ MySQL bằng cách tạo đối tượng

CALL get_candidate_skill(122);

Code language: SQL (Structured Query Language) (sql)
4 mới.

Connection conn = DriverManager.getConnection();

Code language: Java (java)

Sau đó, chuẩn bị một cuộc gọi thủ tục được lưu trữ và tạo đối tượng

CALL get_candidate_skill(122);

Code language: SQL (Structured Query Language) (sql)
1 bằng cách gọi phương thức

CALL get_candidate_skill(122);

Code language: SQL (Structured Query Language) (sql)
6 của đối tượng

CALL get_candidate_skill(122);

Code language: SQL (Structured Query Language) (sql)
4.

String query = "{CALL get_candidate_skill(?)}"; CallableStatement stmt = conn.prepareCall(query)

Code language: Java (java)

Tiếp theo, chuyển tất cả các tham số cho quy trình được lưu trữ. Trong trường hợp này, thủ tục được lưu trữ get_candidate_skill chỉ chấp nhận một trong tham số.

stmt.setInt(1, candidateId);

Code language: Java (java)

Sau đó, thực hiện quy trình được lưu trữ bằng cách gọi phương thức

CALL get_candidate_skill(122);

Code language: SQL (Structured Query Language) (sql)
9 của đối tượng

CALL get_candidate_skill(122);

Code language: SQL (Structured Query Language) (sql)
1. Nó trả về một kết quả được thiết lập trong trường hợp này.

ResultSet rs = stmt.executeQuery();

Code language: Java (java)

Cuối cùng, đi qua

{?= call procedure_name(param1,param2,...)}

Code language: SQL (Structured Query Language) (sql)
1 để hiển thị kết quả.

while (rs.next()) { System.out.println(String.format("%s - %s", rs.getString("first_name") + " " + rs.getString("last_name"), rs.getString("skill"))); }

Code language: Java (java)

Sau đây là ví dụ đầy đủ về việc gọi thủ tục lưu trữ MySQL từ JDBC.

package org.mysqltutorial; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.CallableStatement; /** * * @author mysqltutorial.org */ public class Main { /** * Get skills by candidate id * * @param candidateId */ public static void getSkills(int candidateId) { // String query = "{ call get_candidate_skill(?) }"; ResultSet rs; try (Connection conn = MySQLJDBCUtil.getConnection(); CallableStatement stmt = conn.prepareCall(query)) { stmt.setInt(1, candidateId); rs = stmt.executeQuery(); while (rs.next()) { System.out.println(String.format("%s - %s", rs.getString("first_name") + " " + rs.getString("last_name"), rs.getString("skill"))); } } catch (SQLException ex) { System.out.println(ex.getMessage()); } } /** * * @param args */ public static void main(String[] args) { getSkills(122); } }

Code language: Java (java)

Hãy để chạy chương trình.

Hướng dẫn java call stored procedure mysql - java cuộc gọi được lưu trữ thủ tục mysql

Chương trình hoạt động như mong đợi.

Trong hướng dẫn này, chúng tôi đã chỉ cho bạn cách gọi một quy trình được lưu trữ trong cơ sở dữ liệu MySQL từ chương trình Java bằng đối tượng JDBC CallableStatement.

Hướng dẫn này có hữu ích không?

Nếu quy trình được lưu trữ trả về nhiều bộ kết quả, hãy truy xuất các bộ kết quả. ....

Gọi Callablestatement ...
Làm thế nào bạn có thể thực hiện một quy trình được lưu trữ trong cơ sở dữ liệu trong JDBC?
7.3 Sử dụng JDBC CallableStatements để thực hiện các thủ tục được lưu trữ.
Chuẩn bị câu lệnh có thể gọi bằng cách sử dụng kết nối. Chuẩn bị (). ....
Đặt các tham số đầu vào. ....
Gọi thủ tục được lưu trữ ..

Làm thế nào chúng ta có thể gọi thủ tục được lưu trữ trong Java?

Procedure..
Gọi kết nối.....
Gọi Callablestatement.....
Gọi Callablestatement.....
Gọi một trong các phương thức sau để gọi thủ tục được lưu trữ: ....
Nếu quy trình được lưu trữ trả về nhiều bộ kết quả, hãy truy xuất các bộ kết quả.....
Gọi Callablestatement.....
Gọi một trong các phương thức sau để gọi thủ tục được lưu trữ: ....

Nếu quy trình được lưu trữ trả về nhiều bộ kết quả, hãy truy xuất các bộ kết quả.....

Gọi Callablestatement ...
Làm thế nào bạn có thể thực hiện một quy trình được lưu trữ trong cơ sở dữ liệu trong JDBC?
7.3 Sử dụng JDBC CallableStatements để thực hiện các thủ tục được lưu trữ.
Chuẩn bị câu lệnh có thể gọi bằng cách sử dụng kết nối.Chuẩn bị ().....
Đăng ký các tham số đầu ra (nếu có tồn tại) ....

Đặt các tham số đầu vào (nếu có tồn tại) ....

Truy xuất các hàng từ đối tượng resultset cho mỗi tham số con trỏ ra ...
Xác định một đối tượng kết quả cho mỗi tham số ra có kiểu dữ liệu con trỏ ..
Gọi kết nối.....
Gọi Callablestatement.....
Gọi thủ tục được lưu trữ ..
Gọi Callablestatement.....
Gọi thủ tục được lưu trữ ..