강좌
클라우드/리눅스에 관한 강좌입니다.
프로그램 분류

CallableStatement 사용하기

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

icon01.gif title14.gif

kenu
2001-11-06 4:28오전


실행환경
Windows XP english Version build 2600
jdk 1.3.1_01
apache 1.3.22
Tomcat 4.0.1
Oracle 8.1.5



Procedure 사용하기(http://okjsp.pe.kr/lecture/lec03/procedure01.xml)에 이은 강좌입니다. JSP 에서 oracle 로 쿼리를 여러 번 날리지 않아도 되기 위해서 만든 Procedure 를 jsp 에서 부르는 방법입니다. 일단 소스를 보십시오.

move.jsp
<%@ page contentType="text/html;charset=euc-kr" import="java.sql.*" %><%
String mseq = request.getParameter("mseq");
String tbbs = request.getParameter("tbbs");
if (mseq==null||tbbs==null) {
%>mseq와 tbbs값이 필요합니다.<%
return; // stop
}
 
String DB_URL = "jdbc:oracle:thin:@localhost:1521:okjspdb";
String DB_USER = "scott";
String DB_PASSWORD= "tiger";
 
Connection conn=null;
CallableStatement cstmt=null;
 
String query = "{call PROC_KBOARD_MOVE(?,?)}";
try {
        Class.forName("oracle.jdbc.driver.OracleDriver");
        conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
        
        cstmt = conn.prepareCall(query);
        cstmt.setString(1, mseq);
        cstmt.setString(2, tbbs);
        
        cstmt.executeUpdate();
%>실행되었습니다.<%
} catch(Exception e){
        out.println(e.getMessage());
} finally {
        cstmt.close();
        conn.close();
}
%>



가장 중요한 부분은 아래 부분입니다. CallableStatement 를 사용하기 위한 핵심코드죠. 얼핏 보면 PreparedStatement 랑 흡사합니다. 그도 그럴 수 밖에 없는 것이 API 에서 java.sql.* 에 있는 CallableStatement 를 찾아보면 PreparedStatement 를 상속받은 것을 보실 수 있습니다. 특징적인 메소드는 prepareCall() 입니다. .setString() 은 PreparedStatement 의 것과 같죠. ^^;

핵심부분
...
CallableStatement cstmt=null;
...
String query = "{call PROC_KBOARD_MOVE(?,?)}";
...     
        cstmt = conn.prepareCall(query);
        cstmt.setString(1, mseq);
        cstmt.setString(2, tbbs);
        
        cstmt.executeUpdate();
...



이 소스에 의문을 가지신 분도 있을 겁니다. "mseq는 int로 처리를 해야되는 것 아니냐?", "이 소스 돌아가냐?" 물으신다면, 웃지요. 헐헐~. 소스는 제가 직접 돌려 본 것입니다. 적어도 제가 실행할 때 에러는 다 잡은 것입니다. "그럼 내 PC 에서는 안돌아가냐... 돌아버리겠다..." 하시는 분들은... 삼가 조의를 표하면서 제 강좌를 처음부터 다시 해보시기 바랍니다. 터미널서비스나, pcAnyWhere, telnet 을 열어주신다면 들어가서 제가 해볼 수 있는대로 도와드리고 싶군요. ###### 다시 본론으로 돌아와서 설명 드리겠습니다. jdbc 드라이버와 DB 사이에서 주고받는 값들은 String 이라고 합니다. 대신 jsp와 method를 통해서 들어온 값들을 type 에 맞게 jdbc driver 내부적으로 처리한다고 합니다. 때문에 프로그램 내부에서 값의 변동이 없는 수 등은 그냥 String 으로 받아서 처리해도 크게 문제될 것 없다고 생각됩니다. 혹시 jdbc 에 정통하신 분께서 보신다면 감평부탁합니다. 제가 잘못 전달하면 큰 일이니까요.


위 소스에서 몇가지 팁이 있는데요. ASP 의 Response.End 구문은 break 포인터로 역할을 톡톡히 합니다. 실행하다 중간에 멈추고 이후의 것들은 실행되지 않게 하는 것이죠. jsp 에서는 return 이 유사한 역할을 합니다. jsp 가 servlet 으로 바뀌면서 소스의 중간에 return 을 만나면 메소드 등을 빠져나와 버리기 때문이죠. 위의 if (mseq==null||tbbs==null) 을 넣어준 이유는 error를 미연에 방지하려는 것입니다. NullPointerException 이 발생할 여지를 남겨 두지 않는 것이죠.


멀게만 느껴지는 jsp를 가깝게 느껴지려면 얼마나 시간이 걸릴까요? 저도 2000년 9월에 시작했으니 2001년 11월인 현재 1년이 넘었군요. 책을 써보고 싶은 충동도 있고 한데, 아직 사이트를 보면 멀었습니다. 소원이 있다면 헤헤 "돈 많이 벌고, 부족함 없이 되는 것입니다." 가난은 죄가 아니다. 다만 불편한 것 뿐이다. 라는 말이 있지만, 전 불편한 거 싫거든요. 지금은 연봉만 바라보고 삽니다. 좋은 친구 덕에 지금은 2800백만원 받고 있습니다. 가끔 아르바이트도 합니다만 힘들구요. 참고로 전 84년(중1)부터 프로그래밍했습니다.(apple 컴퓨터에서 basic과 어셈블리어로 프로그램짜고 했습니다.) 그동안 진로때문에 헤매느라 많이 쉬긴 했죠. 하지만, 웹개발자로 나선지는 5년 되었습니다. 평생 내가 해야할 일이라고 생각하고 있습니다. 그리고, 이게 가장 재미있구요. 아내에게 미안한 말이지만 sex 만큼 재미있습니다.(좀 야했나... ^^ 헤헤) 끝에 사설이 길었군요. 하여간 여러분 힘 내시고, JSP 잘 배우시기 바랍니다. 좋은 하루 되세요.


참고문서
about JDBC, 손우상, 영진출판사



관련 사이트


http://okjsp.pe.kr

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,039 명
  • 현재 강좌수 :  35,845 개
  • 현재 접속자 :  80 명