JDBC API 를 통 해 저장 프로 세 스 를 호출 하 는 범례
JDBC API
다음 내용 은 손 위 금 이 쓴 《 자바 네트워크 프로 그래 밍 핵심 기술 상세 해 》 라 는 책의 제1 2 장 을 참고 한다.원본 코드 다운로드 주소:http://lesson.javathinker.net/javanet/javanetsourcecode.rar
java. sql. Callable Statement 인 터 페 이 스 는 데이터베이스 의 저장 과정 을 실행 하 는 데 사 용 됩 니 다.Connection 의 prepareCall () 방법 으로 Callable Statement 대상 을 만 듭 니 다.MySQL 데이터베이스 에 demoSp 라 는 저장 과정 이 있다 고 가정 하면 다음 과 같이 정의 합 니 다.
delimiter //
CREATE PROCEDURE demoSp(IN inputParam VARCHAR(255), INOUT inOutParam INT)
BEGIN
DECLARE z INT;
SET z = inOutParam + 1;
SET inOutParam = z;
SELECT CONCAT('hello ', inputParam);
END //
이상 코드 는 소스 패키지 의 sourcecode / chapter 12 / sql / demoSp. sql 에 있 습 니 다.상기 저장 과정 은 두 개의 매개 변수 가 있 는데 첫 번 째 매개 변 수 는 inputParam 이 VARCHAR 형식 이 고 입력 (IN) 매개 변수 이 며 두 번 째 매개 변 수 는 inOutParam 이 INT 형식 이 며 입 출력 (INOUT) 매개 변수 입 니 다.입 출력 매개 변수 에 대해 호출 자 는 저장 과정 에 매개 변수 값 을 입력 할 수도 있 고 저장 과정 이 끝 난 후에 업 데 이 트 된 매개 변수 값 을 읽 을 수도 있 습 니 다.이 저장 과정 을 어떻게 호출 하 는 지 보 여 줍 니 다.
/ ProcedureTester.java /
import java.sql.*;public class Procedure Tester {public static void main (String args []) throws Exception {/ / 로드 드라이브, 아래 코드 는 MySQL 드라이브 Class. forName ("com. mysql. cj. jdbc. Driver") 을 불 러 옵 니 다.
// URL,serverTimeZone
String dbUrl = "jdbc:mysql://localhost:3306/STOREDB"
+ "?serverTimezone=Asia/Shanghai";
String dbUser="dbuser";
String dbPwd="1234";
//
Connection con = DriverManager.getConnection(dbUrl,dbUser,dbPwd);
// demoSp CallableStatement 。
CallableStatement cStmt = con.prepareCall("{call demoSp(?, ?)}");
//
cStmt.setString(1, "Tom"); //
//cStmt.setString("inputParam", "Tom"); //
//
cStmt.registerOutParameter(2, Types.INTEGER); //
//
//cStmt.registerOutParameter("inOutParam", Types.INTEGER);
//
cStmt.setInt(2, 1); //
//cStmt.setInt("inOutParam", 1); //
//
boolean hadResults = cStmt.execute();
//
if (hadResults) {
ResultSet rs = cStmt.getResultSet();
//SQLExecutor 12.4.4 12-8
SQLExecutor.showResultSet(rs);
}
//
int outputValue = cStmt.getInt(2); //
//int outputValue = cStmt.getInt("inOutParam"); //
con.close();
}}
Callable Statement 대상 을 만 드 는 코드 는 다음 과 같 습 니 다.
CallableStatement cStmt = con.prepareCall("{call demoSp(?, ?)}");
상기 두 개의 물음 표 는 각각 저장 과정의 두 개의 매개 변 수 를 대표 한다.다음 두 가지 방식 으로 매개 변수 에 값 을 부여 할 수 있 습 니 다.
// :
cStmt.setString(1, "Tom");
cStmt.setInt(2, 1);
// :
cStmt.setString("inputParam", "Tom");
cStmt.setInt("inOutParam", 1);
두 번 째 매개 변 수 는 입 출력 매개 변수 입 니 다. 출력 값 을 얻 기 위해 서 는 Callable Statement 의 registerOutParameter () 방법 으로 매개 변수의 유형 을 등록 한 다음 에 저장 과정 이 실 행 된 후에 해당 하 는 getXXX () 방법 으로 출력 값 을 얻 을 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.