정상적으로 돌아야할 (정확히는 어떤 변수일때는 잘 돌고 있는) 소스에서 버그를 발견했다.
parseInt("08") 의 값이 0으로 뜨는것. (parseInt("09") 도 마찬가지이다.)
아마 나의 같은 경우의 겪은 사람들은 String 형으로 된 십자리의 문자를 0을 제외한 int 형으로 바꿀려고 하시는 분들일 것이다.
이상하게 "07" 까지의 값은 제대로 나오지만 "08" 값 부터 0을 뱉어낸다.
이상하다고 생각하여 실험을 해봤다. 


결과값 7 , 0 ?!!


구글님께서 친절히 설명을 해주셧다.
http://stackoverflow.com/questions/6410009/what-do-you-think-parseint08-will-return


간략히 해석해보면 parseInt() 함수는 default 값이 8진수를 받고 변환하는 함수이다. 
"07"의 경우엔 8진수에서 7을 리턴하지만
"08"  의 경우는 변환할경우 8진수에 따라 0이 반환되는것이다.  
(당연히 "09"는 0을 리턴한다.)

이런한 문제를 해결하기 위해서 parseInt 함수의 두번째 파라미터를 입력할수 있는데 두번째에 10을 넣어주면 10진수로 반환하라는 뜻이 된다.

반환값이 10진수라면 parseInt("08", 10) 형식을 8진수라면 parseInt("08") 게 써주게 되어 있다.


 10진수로 반환하게끔 설정. 

결과값~!


저작자 표시
신고

WRITTEN BY
No.190
세계정복의 시작점

받은 트랙백이 없고 , 댓글  2개가 달렸습니다.
  1. 09 는 당연히 1을 리턴하신다고 했는데.. 실제로 해보니 09도 0이 나오네여...
    이유는 모르겠으나.. ^^
  2. 죄송합니다; 오타네요;; "0" 으로 리턴되는것이 맞습니다.
    8진수에서는 8,9 는 유효하지 않은 숫자입니다.
    때문에 리턴값이 무조건 0으로 나와버립니다.
    쉬운예로 윈도우에 있는 계산기를 공학용에서 8진수로 바꾸어서 사용해보시면
    8과 9를 입력 못하는것과 같은 이치 입니다.
    오타는 수정하였습니다. 감사합니다!
secret
Publishing failed
  Could not load the Tomcat server configuration at \Servers\Tomcat v5.0 Server at localhost-config. The configuration may be corrupt or incomplete.
    Resource is out of sync with the file system: '/Servers/Tomcat v5.0 Server at localhost-config/tomcat-users.xml'.
  Could not load the Tomcat server configuration at \Servers\Tomcat v5.0 Server at localhost-config. The configuration may be corrupt or incomplete.
    Resource is out of sync with the file system: '/Servers/Tomcat v5.0 Server at localhost-config/tomcat-users.xml'.

 -_- 서버 실행을 했을때 이런 비스므리한 에러가 뜬다.

나의 경우엔 폴더를 그대로 다른 폴더로 복사해서 경로가 틀어졌거나 새로운 파일로 갱신이 않된 경우 (첫번째경우) 

혹은

server.xml 이나 web.xml 을 수정했을 경우(두번째)

등등의 경우에 위와 같은 에러가 발생한다.

간단하다. server 프로젝트 및 프로젝트 폴더를 F5를 지그시 눌러주고(전부 F5를 눌러서 리플래쉬 시켜보자) 실행시키면 끝. 잘된다.

 
저작자 표시
신고

WRITTEN BY
No.190
세계정복의 시작점

받은 트랙백이 없고 , 댓글  6개가 달렸습니다.
  1. 이거 가지고 3시간 뻘 짓햇는데...ㅠㅠㅠㅠ
    감사드려요^^
  2. ^-^ 안녕하세요 starlight 님! 댓글 감사합니다!ㅎ
    저도 처음에 잘되던 프로그램 에러가 떠서 당황했던 기억이 나네요.ㅎ
    해결 되셧다니 다행입니다!
  3. 이렇게 간단하게 해결되다니 ㅠㅠ 감사합니다~
    좋은 하루 되세요~
  4. ^-^ 정말 이거 처음에 엄청 당황했던 기억이..
    프로젝트나 잘못됬나 해서 몇번을 다시 임포트했었는데 말이죠.ㅎ
    댓글 감사합니다!
  5. 에잉 그래도 안되요잉...ㅜ.ㅜ 그래도 다음에 참고할게요 잘보고갑니당~
    • 댓글 감사합니다!
      저의 경우엔 첫번째 경우라 F5만 눌르면 해결이 됩니다.
      짱짱걸 님의 경우 server.xml 이나 web.xml 을 수정하셔서 경로가 달라져서 그런것으로 보입니다.(혹은 xml 파일내의 경로에 지정된 파일이 없거나)
      해당 xml 파일들을 보시면 해결될꺼 같습니다.
secret

javascript replaceall

web/JSP 2011.09.30 10:25
javascript 에서는 다른 언어가 지원하는 replaceall 함수가 존재 하지 않는다.(재밌는 일이긴 하다.;ㅎ)

만일 replace 만을 했을경우 데이터의 이상이 생길수도 있다.
tmp.replace(" ",""); 을 했을 경우이다.


var tmp = "A B C D";
alert(tmp.replace(" ", ""));


앞의 하나만 치환된것을 볼수 있다. replace의 경우 하나만을 치환하고 리턴하기 때문이다.
물론 while() 문을 돌리면 되겠지만..-_- 그런짓까지는..;;

간단하게 함수두개로 replaceAll()을 만들수 있다.
 

var tmp = "A B C D";

alert(tmp.split(" ").join(""));

split()함수로 " "의 구분 값으로 문장을 쪼개서 배열로 저장한것을
join()함수로 모두 합치게 만든것이다. 


또는 함수로 간편하게 활용 가능.



-첨에 누가 생각했는지 대단!! 

저작자 표시
신고

WRITTEN BY
No.190
세계정복의 시작점

받은 트랙백이 없고 , 댓글이 없습니다.
secret

JSP 메일 보내기.

web/JSP 2011.06.07 10:54
먼저 메일 서버가 구축되어야 합니다. 
다음 포스팅을 참조 하세요.

 James 메일 서버 구축하기. 

i
f 모두 다 햇는데 다음과 같은 에러 화면이 뜬다면 100% 메일 서버가 구축이 않되잇는겁니다. -_-
else if 방화벽 포트를 25번 포트를 열어주세요. 그래도 않된다면..A/S 신청을;;;
(javax.servlet.ServletException: Could not connect to SMTP host: localhost, port: 25)

 

메일 서버가 구축이 되었다면 이제 메일 라이블러리를 통해서 간편하게 메일을 전송할수 있는 JSP파일을 만들어봅니다.

 
1. 라이블러리 다운~
   JAF(JavaBeans Activation Framework) 와  JavaMail 이 필요합니다.
   JAF 다운로드 :  http://www.oracle.com/technetwork/java/jaf11-139815.html 
 
  javaMail 다운로드 : http://www.oracle.com/technetwork/java/index-138643.html

2. 다운로드 받은 파일들의 압축을 풀면 mail.jar 파일과 activation.jar 파일이 있습니다.
이 파일들을 Tomcat 의  common\lib 폴더로 복사합니다.(사실 어디에 있든 상관은 없지만 Tomcat 의 lib폴더는 서버 시작시 모든 라이블러리를 읽어오기 때문에 이곳에 두는게 가장 간편합니다.)
이클립스에서 해당 파일들을 Build Path를 잡아둡니다.
해당 프로젝트 폴더를 클릭하고 오른쪽 마우스 -> Properties 를 클릭합니다.


3. Java Build Path -> Libaraies -> Add External JARs.. 를 클릭합니다.


4. 복사해둔 폴더에서의 가져올 activation.jar, mail.jar 파일을 클릭하고열기!

 
5. 혹시 모르니 Order and Export 탭 를 선택하고 가져온 라이블러리를 위로 살짝 땡겨 줍니다.(up 버튼을 눌러주면 됩니다.) 참고로 상위단에 있을수록 가장 먼저 참고하게 됩니다.


기본 설정은 끝. 이제 JSP 파일만 작성해 주면 됩니다.
6. SendEmail.jsp


 <%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>


<%@ page import="java.util.*,java.io.*,javax.mail.*,javax.mail.internet.*,javax.activation.*" %>


<%

String subject = request.getParameter("subject")==null?"":request.getParameter("subject");

String content = request.getParameter("content")==null?"":request.getParameter("content");

String from = request.getParameter("from")==null?"":request.getParameter("from"); //보내는 사람

String to = request.getParameter("to")==null?"":request.getParameter("to"); //받는 사람 



 if(from.equals("") || to.equals("") || content.equals("") || subject.equals("")){

     System.out.println("메일 전송 실패");

 }else{

// 프로퍼티 값 인스턴스 생성과 기본세션(SMTP 서버 호스트 지정)

Properties props = new Properties();

Session sess= Session.getDefaultInstance(props, null);

Message msg = new MimeMessage(sess);

msg.setFrom(new InternetAddress(from));//보내는 사람 설정

InternetAddress address = new InternetAddress(to);

msg.setRecipient(Message.RecipientType.TO, address);//받는 사람설정

msg.setSubject(subject);//제목 설정

msg.setSentDate(new java.util.Date());//보내는 날짜 설정

msg.setContent(content,"text/html;charset=euc-kr"); // 내용 설정 (HTML 형식)

Transport.send(msg);//메일 보내기

 }

%>



<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">

<title>메일 보내기 TEST</title>

</head>

<body>

<form action="sendEmail.jsp">

제목 :        <input type="text" width="20px" name="subject"/><br>

보내는 사람 : <input type="text" width="20px" name="from"/><br>

받는   사람 : <input type="text" width="20px" name="to"/><br>

내용<br>

 <textarea rows="5" cols="30" name="content"></textarea>

  <input type="submit" name="button" value="전송">

</form>

</body>

</html>


 
7. 설치한 mail 서버를 실행한 상태에서 전송 버튼을 눌르셔야 합니다. 아니면 에러가 납니다.
8. 메일이 잘 왔는지 확인~!
 


오호! 잘왔습니다! ㅋㅋ 이제 메일 주소를 잘 넣었는지. 스크립트는 않들어갔는지 등등 파일 전송도 있겠군요.
여러명에게 전송하는 것도 필요하고요. 메일의 기본적인 걸 만들려면 아직도 멀었네요.
가장 기초적인 전송부분만 제공되는 라이블러리를 통해서 만들어보았습니다.

저작자 표시
신고

WRITTEN BY
No.190
세계정복의 시작점

받은 트랙백이 없고 , 댓글  2개가 달렸습니다.
  1. 오류같은건 뜨지않는데,
    왜 메일이 정상적으로 전송이 않되는걸까요..?
    제임스에서 대신 전송을 해줘요;;
    Hi. This is the James mail server at user-644e64ee69.
    I'm afraid I wasn't able to deliver your message to the following addresses.
    This is a permanent error; I've given up. Sorry it didn't work out. Below
    I include the list of recipients and the reason why I was unable to deliver
    your message.

    제가 공유기를 써서 외부IP랑 DNS를 기입했어요. 그렇게 해도 되는건가요?
  2. 메일 전송은 잘 되는데요,,,,

    왜 한글이 깨져서 보내지죠..?

    request.setCharacterEncoding 해도 깨지는데,,, 이거 어디쪽을 만져야

    한글이 보내지는지 알려주세요ㅠㅠ

    영어는 잘보입니다.,.
secret
Java Apache Mail Enterprise Server 의 약자인 James !! (미국 남자의 아주 흔한 이름과 같다)
간단한 설치 및 구성으로 메일 서버를 구축 할수 있는 장점이 있다.

홈페이지를 둘러보니 재미있는 프로젝트 들이 많이있다. 흠.. 영어가 딸려서 정확히는 모르겠지만 뭐 나름 눈여겨 볼만한 것들이 있다.

James 홈페이지 방문하기

1. 일단 서버 구성을 필요한 파일을 다운 받아야 한다.

파일 다운로드  

경로가 한글이 들어가면 않됩니다
. 그래서 전 C:에 압축을 풀었습니다. 



현재 상태에서는 기본적인 구성이 이루어지지 않았습니다.
기본적인 설정 파일을 생성하기 위해선 실행을 한번 해줘야 합니다. 

(james-2.2.0\apps 폴더 아래에 여러 환경설정 파일이 있어야 합니다. )


2. 실행 -> cmd ->  cd c:\james-2.2.0 ->  cd bin 

run.bat 파일을 실행 합니다.



3.  컴파일이 되면서 설정 폴더와 파일들이 생성됩니다.
 아래와 같이 나오면 성공!


4. 기본 설정을 하기 위해서 config.xml 을 편집해야 합니다.
 파일의 위치는 C:\james-2.2.0\apps\james\SAR-INF 의 폴더에 있습니다. 

 


5.먼저 관리자의 암호를 바꿉니다. (ID도 바꿀수 있습니다.)
찾기 힘드시니 password 키워드로 찾기하시기바랍니다. (저의 경우 498라인에 있었습니다.)
간단히 ID 와 password 를 바꿀수 있습니다. 콘솔에서 사용자 편집을 할때 사용하지만 저는 필요가 없어서 패스.


6. 자신의 IP와 DNS정보를 넣어줍니다.
   <dnsserver> <servers> 안에 자신의 IP 와 DNS 정보를 넣어줍니다.
    태그는 <server>로 해주시면 됩니다.
 (당연히 저의 IP는 가렸습니다;; )


 7. 모든 설정은 완료 하였습니다. 이제 다시 run.bat을 통해서 서버를 실행합니다.

8. 서버의 종료는 ctrl+c 키를 눌러주면 종료 됩니다. 종료 할꺼냐는 물음이 나오면 Y로 하시면 종료 됩니다.

 
서버의 구성은 모두완료 하였습니다. 이제 JSP로 정상적으로 메일이 가는지 확인해봐야겠쬬?
 

저작자 표시
신고

WRITTEN BY
No.190
세계정복의 시작점

받은 트랙백이 없고 , 댓글  9개가 달렸습니다.
  1. 좋은내용이네요 비공개로 퍼갈게요 ^^
  2. 댓글 감사합니다! 서버에 메일 구축할때는 유용한데 해당 프로그램을 계속 켜놓고 있어야 하는 단점이 있기에..(콘솔화면이라 보기 싫더군요..)
  3. james 홈피,,, 2012.08.23 17:22 신고
    james 홈페이지에 접속이 안되는데,,,
    홈페이지 사라졋나여??
    james 다운을 받아야하는데 받을곳이 없네여ㅠㅠ
    블로그에도 없고,,,ㅠㅠ;;;쩝,,
  4. http://james.apache.org/index.html
    접속이 잘되는데요?ㅎㅎ
  5. 맥을 사용중인데 bat파일이 실행되지 않아서요ㅠㅠ 다른방법 없나요??ㅠㅠㅠ
    • bat 파일은 윈도우실행파일입니다.
      다운받으신 파일을 보시면 run.sh 파일이 있으실겁니다.
      이 파일로 실행시키시면 됩니다.
      혹시 파일이 없으시면 zip압축 파일이 아닌 tar.gz 파일로 받아보시면
      리눅스/유닉스 계열까지 지원하는 파일이니 확인해 보시기 바랍니다.
    • http://wiki.apache.org/james/RunAsService

      중간부분에 mac os 에서 구동시키는 예제가 나옵니다. 참고하시기 바랍니다.
  6. 포스트 잘 봤습니다.

    근데

    sendEmail.jsp로 액션하여 submit 하셨는데

    저 jsp 소스는 어디있나요,,.,,?
secret


에러가 나온다고 해서 당황하지 말자.
힌트는 주어져 있다. 다른건 다 무시하고  오류 영어를 살짝만 보면 된다.

Unconvertible -> 바꿀수 없는
UTF-8
character -> 문자
beginning -> 시작
with
0xa4  (메모리 주소값이다.)

이래서 프로그래머는 영어를 해야 한다는것이다..ㅜㅡㅜ (사실 몰라서 한참을 헤멨다.) 
"0xa4의 시작 문자를  UTF-8로 바꿀수 없습니다~ " 란 말이 된다.
즉...-_- xml 파일에는 "한글"이 들어가 있는데 xml 상위단에 encoding 이 UTF-8로 설정되어 있다는것이다.

해결책!
1)  xml 파일의 <?xml version="1.0" encoding="UTF-8"?> 를 <?xml version="1.0" encoding="EUC-KR"?>로 바꾼다.
2) xml파일내의 한글을 모두 영어로 바꾼다.(주석 포함) 

- 파싱 더럽게 짜증난다...-_- 
저작자 표시
신고

WRITTEN BY
No.190
세계정복의 시작점

받은 트랙백이 없고 , 댓글이 없습니다.
secret

JSP stack

web/JSP 2011.05.04 17:38
import java.util.Vector;



public class stack {

    private Vector vStack = new Vector();
    private static int iStackTop = 0;
    public void input(String str){
        vStack.add(str);
        iStackTop++;
      
    }
    
    public String output(){
        if(0 > (iStackTop-1))
            return "stack is underfloor";
      
        String str = (String)vStack.get(iStackTop-1);
        
        vStack.remove(--iStackTop );
        return str;
    }
    
    public String output(int itemp){
        
        if(0 > (itemp-1))
            return "stack is underfloor";
        
        String str = (String)vStack.get(itemp-1);
        return str;
    }
    
    public int outputMaxNumber(){
        return iStackTop;
    }
    
    public void clearStack(){
       vStack.removeAllElements();
    }
    
}


 


stack s = new stack();
s.input("1");
s.input("2");
s.input("3");
System.out.println(s.output());
s.clearStack();
System.out.println(s.output());

 



-_- 갑자기 왠 스택이냐고? 나도 웹을 하면서 이런걸 만들게 될줄은 몰랐다.
이건 단지 기초 운동 축에도 못끼는것일뿐.. 내일부터 달리게될 엄청난 프로젝트를 실감하시라.
- 벡터로  스택 만드니 간단하구나... 무한대로 쓸수도 잇고.. 형식도 맘대로 넣을수도 있고..(여기선 내가 String를 쓸거라서 일부러 이렇게 넣었다.)
- 필요한 함수가 있어서 살짝 수정햇음. 

저작자 표시
신고

WRITTEN BY
No.190
세계정복의 시작점

받은 트랙백이 없고 , 댓글  2개가 달렸습니다.
  1. ㅠㅠ d어렵네요 이거 무슨말인지?ㅋㅋ
  2. 헛! 안녕하세요! 여기까지 들러주시다니...ㅎ
    음.. 간단히 말씀드리면 계산기에 쓰이는 로직입니다.
    저 로직이 있어야만 계산기와 컴퓨터가 일을 할수 있습니다.^-^
    그만큼 기초적이면서 중요한거요.ㅎ
    들러주셔서 감사합니다!!!!!!ㅋ
secret
-_- 살아생전 밀리니엄버그를 여기서 만나다니;;
요즘에 퍼블리싱일도 하기때문에 브라우져 표준에 최대한 신경쓰고 있는데......!!
크롬과 사파리, 파폭에서 날짜가 이상하게 나오는것을 보고 먼가 했다.(한마디로 IE에서만 된다.)

var lastymd;
 str =   fMonth.value +  "-" + fDay.value+ "-" +  fYear.value;
lastymd = new Date(str);  //날짜 포멧에 따른 날짜 형태로 변환.

/
/날짜 계산후
//특정 필드에 값을 집어 넣는다.
order_ymd.value = lastymd.getYear()+"-"+month+"-"+day  ; 

아무리 찾아봐도 메소드도 맞고 IE에서는 값이 잘 나와서 날짜 계산만 보고 있었는데 이거왠;;
getYear() 함수는 폐기 함수다.
반환값이 2000년 이 넘어가면 포멧에 문제가 생긴단다.
만일 getYear()로 현재 년도를 받으면 111이 나온다. 

IE에서는 자체적으로 처리해줘서 2011년도를 정상적으로 찍어주고 있었다.;;(이걸 좋아해야하나..)
어쩄든 폐기메소드이므로 쓰지말고

getFullYear()를 쓰시면 된다.
now.getFullYear()

-혹시 협정 세계 표준시(UTC)를 원한다면 getUTCFullYear()를 사용하면 된다. 
저작자 표시
신고

WRITTEN BY
No.190
세계정복의 시작점

받은 트랙백이 없고 , 댓글이 없습니다.
secret

java 금액 치환

web/JSP 2011.03.06 23:04
일반적인 int 형 이나 long 형에 대한 금액 치환은 소스가 너무나 많다. 
but 소수점으로 된 숫자, - 가 있는 숫자, 혹은 범위가 넘어서는 큰수에 대한 치환이 없어서 -_- 만들어버렸다.;;

먼저 치환할 숫자를 보면 

String s_str= "-9999999999999999999.999999999999999999";

숫자야 더 커도 상관없다. String형이기 때문에 몇십만줄을 써도 치환이 가능하다.
또한 소수점까지 있는것을 볼수 있다.(이것이 가장 큰 이유인데 int 형과 long 형은 소수점 표현이 않된다. 
소수점 표기가 되는 형태는 float 와 double 형 이지만 실수형으로 표기되기 때문에 금액하고는 맞지가 않다.)

이제 치환되는 함수


String InsertComma(String Source){
  String sReturn = "";
  String sTemp = Source;
  boolean point = false;
  int i = 0;
  int j = 0;
  if(sTemp.indexOf(".") != -1){
      i = sTemp.indexOf(".")-1;
      point = true;
  }else{
      i = (sTemp.length()-1);
  }
 
  for( ; i>=0; i--){
    if((j%3 == 0) && (j!=0)){
      sReturn =  sTemp.substring(i, i+1) + "," + sReturn;
    }
    else{
      sReturn = sTemp.substring(i, i+1) + sReturn;
    }

    j++;
  }

  /*==================================================
  '-,123,456' 과 같은 경우 마이너스 다음의 쉼표를 제거한다.
  ===================================================*/
  sReturn = replace(sReturn, "-,", "-");
  if(point == true){
      sReturn+=   sTemp.substring(sTemp.indexOf("."), sTemp.length());
  }
  return sReturn;
}

public static String replace(String strTarget, String strSearch, String strReplace) {
    String strCheck = new String(strTarget);
    StringBuffer strBuf = new StringBuffer();

    while(strCheck.length() != 0) {
      int begin = strCheck.indexOf(strSearch);
      if(begin == -1) {
        strBuf.append(strCheck);
        break;
      }
      else {
        int end = begin + strSearch.length();
        strBuf.append(strCheck.substring(0, begin));
        strBuf.append(strReplace);
        strCheck = strCheck.substring(end);
      }
    }
    return new String(strBuf);
  }


InsertComma(s_str) 을 해보시면 이제 원하는 금액 치환을 얻을수 있을것이다.

저작자 표시
신고

'web > JSP' 카테고리의 다른 글

JSP stack  (2) 2011.05.04
Date.getYear()를 쓰지 말자.  (0) 2011.04.14
java 금액 치환  (2) 2011.03.06
jsp procedure CURSOR  (0) 2011.02.19
서버 시간 알아내기  (0) 2011.02.15
jsp java.lang.UnsupportedClassVersionError 자바빈 500 에러  (0) 2011.01.25

WRITTEN BY
No.190
세계정복의 시작점

받은 트랙백이 없고 , 댓글  2개가 달렸습니다.
  1. 빅데시멀을 사용해보시는건 어떨까요
  2. 사칙연산 및 계산을 하기 위한다면 BigDecimal 을 쓰면 되지만 금액 치환을 하기 위함이라 String로 변형하여 사용하였습니다.
secret

jsp procedure CURSOR

web/JSP 2011.02.19 17:06
프로시저는 말만 어려워 보이지 사실 function 과 비슷하다. 단지. return 값이 하나이면 function.
두개 이상이면 procedure 일 뿐이다.

for, while , if 문구등 평상시 코딩하는것과 비슷한데, 단지 이놈의 cursor 이 문제다.
DB의 구조체라고 해야될까? 테이블에서 뽑아온 값을 저장하는정도의 오브젝트라고 생각하면된다.

가끔씩 귀찮아서 프로시져로 코딩해버리는데 리턴값이 한두개가 아닌 테이블 전체를 원한다면?
당연히 커서를 써야 할때이다. 

jsp 에서 프로시져 out 으로 나오는 커서를 간단하게 출력하는 예제를 써본다.

먼저 procedure 를 만든다.


CREATE OR REPLACE procedure procedure_test(c2 out SYS_REFCURSOR)
is

begin
      OPEN c2 FOR
        SELECT OBJECT_ID, OBJECT_NAME 
            FROM USER_OBJECTS 
            WHERE OBJECT_TYPE ='PROCEDURE'; 
            
end;
/


이 프로시져의 역활은 계정내 모든 프로시져의 이름과 ID를 출력하는 프로시져이다.

이번엔 jsp 


<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
 <%@page import="java.util.*" %>

<%@page import="java.sql.*" %>

<%!

/******************

오라클 접속 공통 모듈

*******************/

Connection con;
Statement stmt;
ResultSet rset;
ResultSet rs;
%>

<%

Class.forName("oracle.jdbc.driver.OracleDriver");

con = DriverManager.getConnection("DB커넥션 부분. 여기는 알아서 기술해주세요;;");

stmt = con.createStatement();

int iReturn = 0;

String sReturn = "";

Vector vProcedure = new Vector();
try{

  String strProc = "{call procedure_test(?)}";

  java.sql.CallableStatement cstmt = con.prepareCall(strProc);

  cstmt.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);

  cstmt.execute();

  rs = (ResultSet)cstmt.getObject(1);
  
   while(rs.next()) { 
       Hashtable htProcedure = new Hashtable();
       htProcedure.put("OBJECT_ID", rs.getString("OBJECT_ID"));
       htProcedure.put("OBJECT_NAME",  rs.getString("OBJECT_NAME"));
  
   vProcedure.addElement(htProcedure);
   
  }
  
  cstmt.close();

}catch(java.lang.Exception ex){

  System.out.println("에라 = "+ ex.getMessage());

  ex.printStackTrace();

}

stmt.close();
con.clearWarnings(); 
con.close();
%>


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
for(int i=0; i < vProcedure.size(); i++){
    Hashtable ht= (Hashtable)vProcedure.get(i);
    %>
    <%=Integer.parseInt(((ht.get("OBJECT_ID")).toString()))%> ||
    <%=ht.get("OBJECT_NAME").toString()%>
    <br>
    <%
}

%>
</body>
</html>

빨간색 부분이 중요한 부분이다.
① String strProc = "{call procedure_test(?)}";

②  java.sql.CallableStatement cstmt = con.prepareCall(strProc);

③   cstmt.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);

④  cstmt.execute();

  rs = (ResultSet)cstmt.getObject(1);

①실행할 프로시져를 명시하고 
Call을 통해서 객체를 선언하고 
out으로 나올 커서를 담을 객체를 선언한다.( oracle.jdbc.OracleTypes.CURSOR)
④ execute()를 통해서 프로시져를 실행하고(sql 실행하는것과 같다.)
⑤ Statement객체로 넘어온 값을 ResultSet 에 담는다.

결과는 이렇게 나오네 

- 프로시져도 말만 그렇치 의외로 간단하다.
저작자 표시
신고

'web > JSP' 카테고리의 다른 글

Date.getYear()를 쓰지 말자.  (0) 2011.04.14
java 금액 치환  (2) 2011.03.06
jsp procedure CURSOR  (0) 2011.02.19
서버 시간 알아내기  (0) 2011.02.15
jsp java.lang.UnsupportedClassVersionError 자바빈 500 에러  (0) 2011.01.25
jsp session  (0) 2011.01.18

WRITTEN BY
No.190
세계정복의 시작점

받은 트랙백이 없고 , 댓글이 없습니다.
secret