CallableStatement 실습

3452 단어 JDBCJDBC

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("데이터베이스 연결 성공");
					
					try
					{
						// preparedStatement 처럼 쿼리문이 먼저 준비되어야 작업객체를 생성할 수 있다. check!
						String sql = "{call PRC_MEMBERINSERT(?, ?)}"; // 넘겨주어야하는 매개변수의 갯수만큼 『?』를 써줌
						
						// CallableStatement 작업 객체 생성 check!
						CallableStatement cstmt = conn.prepareCall(sql);
						
						// 매개변수 전달
						cstmt.setString(1, name);
						cstmt.setString(2, tel);
						
						int result = cstmt.executeUpdate(); // 이 프로시저는 INSERT가 발생하는 프로시저 이므로 executeUpdate => 적용된 행의 갯수 int 반환
						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());
		}
	}
}

실습2

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
				{
					// 쿼리문 준비
					String sql = "{call PRC_MEMBERSELECT(?)}"; // ? 에 넘겨주는건 전적으로 프로시저에 의존적이다.
					
					// CallableStatement 작업 객체 생성 check
					CallableStatement cstmt = conn.prepareCall(sql);
					
					// check
					// 프로시저 내부에서 sys_refcursor 를 사용하고 있기 때문에
					// OracleTypes.CURSOR 를 사용하기 위한 등록 과정이 필요한 상황
					// 1. Project Explore 상에서 해당 프로젝트 마우스 우클릭
					//	  > Build Path > Configure Build Path > Libraries 탭 선택
					//    > 우측 add External JARs 버튼 클릭 > 『ojdbc6.jar』 파일 추가하고 Apply and close
                    //					                                          (외부 jar 파일 연결)
					// 2. 『import oracle.jdbc.OracleTypes;』 구문 추가 등록
					
					// OracleTypes 는 인텔리센스에서 .internal이 빠진 oracle.jdbc 만 있는 OracleTypes 이다. 
					cstmt.registerOutParameter(1, OracleTypes.CURSOR);
					
					cstmt.execute();
					ResultSet rs = (ResultSet)cstmt.getObject(1); // Object 타입을 ResultSet 타입으로 다운캐스팅.. 
				
					while (rs.next())
					{
						String sid = rs.getString("SID");
						String name = rs.getString("NAME");
						String tel = rs.getString("TEL");
						
						String str = String.format("%3s %7s %10s", sid, name, tel);
						
						System.out.println(str);
					}
					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());
		}
	}
}

좋은 웹페이지 즐겨찾기