JAVA개념&실습

JDBC : 08. CallableStatement - SQL 구문 전송 실습

u_SZero 2023. 5. 24. 00:05

! 현재 배워가고 있는 주인장이 쓴 글이니 정보의 정확성에 유의하시기 바랍니다 !


 

Test001.java

/*==================================================
   Test001.java
   - CallableStatement 를 활용한 SQL 구문 전송 실습
====================================================*/

package com.test;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.util.Scanner;

import com.util.DBConn;

public class Test001
{
	public static void main(String[] args)
	{
		try
		{
			Scanner sc = new Scanner(System.in);
			Connection conn = DBConn.getConnection();
			
			do
			{
				System.out.print("이름 입력(-1종료) : ");
				String name = sc.next();
				
				if (name.equals("-1"))
						break;
			
				System.out.print("전화번호 입력 : ");
				String tel = sc.next();
				
				if (conn != null)
				{
					System.out.println("\n데이터베이스 연결 성공~!!!");
				
					try
					{
						// 쿼리문 준비 	check~!!!
						String sql = "{call PRC_MEMBERINSERT(?, ?)}";
						
						// CallableStatement 작업 객체 생성	 check~!!!
						CallableStatement cstmt = conn.prepareCall(sql);
						
						// 매개변수 전달   check~!!!
						cstmt.setString(1,  name);
						cstmt.setString(2,  tel);
						
						int result = cstmt.executeUpdate();
						
						if (result > 0)
							System.out.println("프로시저 호출 및 데이터 입력 완료~!!!");
						
					} catch (Exception e)
					{
						System.out.println(e.toString());
					}
				}	
			} while (true);
			
			DBConn.close();
			
			System.out.println("\n데이터베이스 연결 종료~!!!");
			System.out.println("프로그램 종료됨~!!!");
			
		} catch (Exception e)
		{
			System.out.println(e.toString());
		}
	}
}

// 실행 결과

/*
이름 입력(-1종료) : 김나다
전화번호 입력 : 010-2222-2222
데이터베이스 연결 성공~!!!
프로시저 호출 및 데이터 입력 완료~!!!
이름 입력(-1종료) : 이다라
전화번호 입력 : 010-3333-3333
데이터베이스 연결 성공~!!!
프로시저 호출 및 데이터 입력 완료~!!!
이름 입력(-1종료) : 한라마
전화번호 입력 : 010-4444-4444
데이터베이스 연결 성공~!!!
프로시저 호출 및 데이터 입력 완료~!!!
이름 입력(-1종료) : -1

데이터베이스 연결 종료~!!!
프로그램 종료됨~!!!
*/

 

 

Test002.java


프로시저 내부에서 SYS_REFCURSOR 를 사용하고 있기 때문에
OracleTypes.CURSOR 를 사용하기 위한 등록 과정이 필요한 상황.
1. Project Explore 상에서 해당 프로젝트 마우스 우클릭.
   > Build Path > Configure Build Path 클릭.
2. 이후 열리는 대화창에서 Libraries 탭 클릭.
   > 우측 Add External Jars 버튼 클릭.
3. 이때 열리는 파일 등록창에서
   『ojdbc6.jar』 파일 추가 등록.
4. 『import oracle.jdbc.OracleTypes;』 구문 추가 등록

 

/*==================================================
   Test002.java
   - CallableStatement 를 활용한 SQL 구문 전송 실습
====================================================*/

package com.test;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;

import com.util.DBConn;

import oracle.jdbc.OracleTypes;

public class Test002
{
	public static void main(String[] args)
	{
		try
		{
			Connection conn  = DBConn.getConnection();
			
			if (conn != null)
			{
				System.out.println("데이터베이스 연결 성공~!!!");
				
				try
				{
					// 쿼리문 준비 check~!!!
					String sql = "{call PRC_MEMBERSELECT(?)}";
					
					// CallableStatement 작업 객체 생성 check~!!!
					CallableStatement cstmt = conn.prepareCall(sql);
					
					// 매개변수 전달 check~!!!
					//cstmt.registerOutParameter(1, 오라클에서의커서); 
					cstmt.registerOutParameter(1, OracleTypes.CURSOR);
					cstmt.execute();
					ResultSet rs = (ResultSet)cstmt.getObject(1);
					
					while (rs.next())
					{
						String sid = rs.getString("SID");
						String name = rs.getString("NAME");
						String tel = rs.getString("TEL");
						
						/*
						String str = String.format("%3s %7s %12s", sid, name, tel);
						System.out.println(str);
						↓
						*/
						
						System.out.printf("%3s %7s %12s\n", sid, name, tel);
					}
					rs.close();
					cstmt.close();

				} catch (Exception e)
				{
					System.out.println(e.toString());
				}
			}
			
			DBConn.close();
			System.out.println("\n데이터베이스 연결 닫힘~!!!");
			System.out.println("프로그램 종료됨~!!!");
			
		} catch (Exception e)
		{
			System.out.println(e.toString());
		}
	}
}


// 실행 결과

/*
데이터베이스 연결 성공~!!!
1     박가나 010-1111-1111
2     김나다 010-2222-2222
3     이다라 010-3333-3333
4     한라마 010-4444-4444

데이터베이스 연결 닫힘~!!!
프로그램 종료됨~!!!
*/

 


! 현재 배워가고 있는 주인장이 쓴 글이니 정보의 정확성에 유의하시기 바랍니다 !