Có thể phân ra làm 2 nhóm người: nhóm người sử dụng cơ sở dữ liệu, nhóm người thiết kế, triển khai cơ sở dữ liệu, nhóm người thứ nhất không có kiến thức về cách tổ chức cơ sở dữ liệu, họ đặt ra các yêu cầu với nhóm người thứ hai, và nhận lại được một tập các đặc tả về store procedure, cơ sở dữ liệu với họ hoàn toàn là một cái hộp đen, mang đúng nghĩa là một abstract data type, với giao diện là các store procedure. Nhóm người thứ hai thì hiểu rất rõ cơ sở dữ liệu như thế nào, nếu cơ sở dữ liệu quá phức tạp, trưởng nhóm có thể phân chia các quyền và công việc nhỏ hơn với sự giúp đỡ của view.
Bài viết này hướng dẫn nhóm người thứ nhất về cách sử dụng thủ tục lưu trữ trong java.
Giả sử đã có một đối tượng connection, kết nôi thành công đến cơ sở dữ liệu, cơ sở dữ liệu cung cấp đặc tả về một store procedure như sau:
Tên: gfmi
Tác dụng: lấy id của thành viên đầu tiên lưu trữ trong cơ sở dữ liệu.
Tham số:
1.
tên: id
loại: tham số ra
kiểu: int
tác dụng: chứa kết quả trả về là id của thành viên đầu tiên
Giá trị trả về: không xác định
Tạo đối tượng hỗ trợ giao diện CallableStatement
Việc đầu tiên là phải tạo một đối tượng hỗ trợ giao diện callableStatement từ đối tượng connection
CallableStatement statementmanager = connection.prepareCall( "call gfmi(?)");
tham số của hàm prepareCall có dạng "call xxx(?,?,?,..)"
với xxx là tên hàm cần gọi, theo như đặc tả store procedure ở trên thì là gfmi
liền ngay sau tên là danh sách các tham số, mỗi tham số không cần ghi tên mà chỉ ghi dấu hỏi (?), phân cách nhau bởi dấu phảy (,).
Đăng ký các tham số
Tiếp theo là phải đăng ký tham số:
statementmanager.registerOutParameter( "id", Types.INTEGER );
từ đặc tả có thể dễ dàng suy ra các tham số tương ứng
Gọi hàm
statementmanager.executeQuery();
Lấy kết quả
statementmanager.getInt( "id")
Dưới đây là code tham khảo
try
{
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection connection = DriverManager.getConnection( "jdbc:mysql://localhost:3306","aaaa","aaaa" );
connection.setCatalog( "class");
CallableStatement statementmanager = connection.prepareCall( "call gfmi(?)");
statementmanager.registerOutParameter( "id", Types.INTEGER );
statementmanager.executeQuery();
System.out.println(statementmanager.getInt( "id") );
}
catch ( Exception ex )
{
System.out.printf( "%s", ex.toString() );
}







