> 데이터 베이스 > MySQL 튜토리얼 > JDBC의 CallableStatement란 무엇입니까?

JDBC의 CallableStatement란 무엇입니까?

PHPz
풀어 주다: 2023-09-07 23:53:02
앞으로
1034명이 탐색했습니다.

JDBC 中的 CallableStatement 是什么?

CallableStatement 인터페이스는 저장 프로시저를 실행하는 메서드를 제공합니다. JDBC API는 저장 프로시저 SQL 이스케이프 구문을 제공하므로 모든 RDBMS에 대해 단일 표준 방식으로 저장 프로시저를 호출할 수 있습니다.

Creating a CallableStatement

Connection 인터페이스의 prepareCall() 메소드를 사용하여 CallableStatement(인터페이스)를 생성할 수 있습니다. 이 메서드는 저장 프로시저를 호출하기 위한 쿼리를 나타내는 문자열 변수를 받아들이고 CallableStatement 개체를 반환합니다.

호출 가능 문에는 입력 매개변수, 출력 매개변수 또는 둘 다를 가질 수 있습니다. 프로시저 호출에 입력 매개변수를 전달하려면 플레이스홀더를 사용하고 CallableStatement 인터페이스에서 제공하는 setter 메소드(setInt(), setString(), setFloat())를 사용하여 이러한 매개변수에 대한 값을 설정할 수 있습니다.

데이터베이스에 myProcedure라는 프로시저가 있다고 가정하면 다음과 같은 호출 가능 문을 준비할 수 있습니다.

//Preparing a CallableStatement
CallableStatement cstmt = con.prepareCall("{call myProcedure(?, ?, ?)}");
로그인 후 복사

입력 매개변수에 대한 값 설정

setter 메서드를 사용하여 입력 매개변수에 대한 값을 설정할 수 있습니다. 절차 호출.

두 개의 매개변수를 허용합니다. 그 중 하나는 입력 매개변수의 배치 색인을 나타내는 정수 값이고, 다른 하나는 전달해야 하는 값을 나타내는 int, String, float 등입니다. 프로세스에 매개변수를 입력합니다.

참고: 색인 외에도 매개변수 이름을 문자열 형식으로 전달할 수도 있습니다.

cstmt.setString(1, "Raghav");
cstmt.setInt(2, 3000);
cstmt.setString(3, "Hyderabad");
로그인 후 복사

콜러블 문 실행

CallableStatement 객체를 생성한 후 execute() 메소드 중 하나를 사용하여 실행할 수 있습니다.

cstmt.execute();
로그인 후 복사

Example

다음 데이터를 포함하는 MySQL 데이터베이스에 Employee라는 테이블이 있다고 가정합니다.

+---------+--------+----------------+
| Name    | Salary | Location       |
+---------+--------+----------------+
| Amit    | 30000  | Hyderabad      |
| Kalyan  | 40000  | Vishakhapatnam |
| Renuka  | 50000  | Delhi          |
| Archana | 15000  | Mumbai         |
+---------+--------+----------------+
로그인 후 복사

다음과 같이 테이블에 값을 삽입하기 위해 myProcedure라는 프로시저를 생성합니다.

Create procedure myProcedure (IN name VARCHAR(30), IN sal INT, IN loc VARCHAR(45))
   -> BEGIN
   -> INSERT INTO Employee(Name, Salary, Location) VALUES (name, sal, loc);
   -> END //
로그인 후 복사

아래는 Employee 테이블에 새 레코드를 삽입하기 위해 위에서 생성된 프로시저를 호출하기 위해 호출 가능 문을 사용하는 JDBC 예제입니다.

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class CallableStatementExample {
   public static void main(String args[]) throws SQLException {
      //Registering the Driver
      DriverManager.registerDriver(new com.mysql.jdbc.Driver());

      //Getting the connection
      String mysqlUrl = "jdbc:mysql://localhost/testdb";
      Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
      System.out.println("Connection established......");
      //Preparing a CallableStateement
      CallableStatement cstmt = con.prepareCall("{call myProcedure(?, ?, ?)}");

      cstmt.setString(1, "Raghav");
      cstmt.setInt(2, 3000);
      cstmt.setString(3, "Hyderabad");

      cstmt.setString(1, "Kalyan");
      cstmt.setInt(2, 4000);
      cstmt.setString(3, "Vishakhapatnam");

      cstmt.setString(1, "Rukmini");
      cstmt.setInt(2, 5000);
      cstmt.setString(3, "Delhi");

      cstmt.setString(1, "Archana");
      cstmt.setInt(2, 15000);
      cstmt.setString(3, "Mumbai");

      cstmt.execute();
      System.out.println("Rows inserted ....");
   }
}
로그인 후 복사

Output

Connection established......
Rows inserted ....
로그인 후 복사

선택 쿼리를 사용하여 Employee 테이블의 내용을 검색하면 아래와 같이 새로 추가된 레코드를 관찰할 수 있습니다.

mysql> select * from employee;
+---------+--------+----------------+
| Name    | Salary | Location       |
+---------+--------+----------------+
| Amit    | 30000  | Hyderabad      |
| Kalyan  | 40000  | Vishakhapatnam |
| Renuka  | 50000  | Delhi          |
| Archana | 15000  | Mumbai         |
| Raghav  | 3000   | Hyderabad      |
| Raghav  | 3000   | Hyderabad      |
| Kalyan  | 4000   | Vishakhapatnam |
| Rukmini | 5000   | Delhi          |
| Archana | 15000  | Mumbai         |
+---------+--------+----------------+
9 rows in set (0.00 sec)
로그인 후 복사

위 내용은 JDBC의 CallableStatement란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿