출처 : http://www.okjsp.pe.kr/seq/106272

첨부 파일 참고~


초보자
2007-11-02 17:50:42.0
날자비교하는 소스 질문이요

 

날자를 비교하는 함수를 만들어 사용중입니다.

잘 돌아가던건데 왜 결과가 다르게 나옵니다.

 

시작날자와 종료날자를 파라미터로 넘겨서 오늘날자를 기준으로 두날자 사이에

 

들어오는지 체크하는 함수인데 계속 false로 나오네요.

  • 사용하던 것 중 날짜비교와 관련한 일부를 올려드립니다.
    혹 몰라서 다시 테스트를 해보았으니 이상 없을겁니다.
    ---------------------------------------------------
    /*
    * @(#)ConcernOfDateTest.java
    * neoburi@nowonplay.com, All rights reserved.
    * 2007. 11. 03 - First implementation.
    * contact : neoburi@nowonplay.com
    */
    package test.util.date;

    import java.text.DateFormat;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;

    /**
    * 날짜와 관련 테스트를 수행하는 클래스이다.
    *
    * @author neoburi@nowonplay.com, 2007
    * @version 1.0 Since 2007. 11. 03
    */
    public class ConcernOfDateTest {
    private final String DATE_FORMT = "yyyy-MM-dd";
    private final String DATETIME_FORMT = "yyyy-MM-dd HH:mm:ss";
    /**
    * Test main method
    * @param args
    */
    public static void main(String[] args) throws Exception{
    new ConcernOfDateTest().doNext();
    }
    /**
    * @throws Exception
    */
    void doNext()throws Exception{
    System.out.printf(
    "2007-11-02 is bigger than 2007-11-03=%s%n",
    isBiggerDate("2007-11-03", "2007-11-02", DATE_FORMT));
    System.out.printf(
    "2007-11-03 is bigger than 2007-11-02=%s%n",
    isBiggerDate("2007-11-02", "2007-11-03", DATE_FORMT));

    System.out.print("\n");

    System.out.printf(
    "2007-11-02 is equals or bigger than 2007-11-03=%s%n",
    isEqualsOrBiggerDate("2007-11-03", "2007-11-02", DATE_FORMT));
    System.out.printf(
    "2007-11-03 is equals or bigger than 2007-11-02=%s%n",
    isEqualsOrBiggerDate("2007-11-02", "2007-11-03", DATE_FORMT));
    System.out.printf(
    "2007-11-02 is equals or bigger than 2007-11-02=%s%n",
    isEqualsOrBiggerDate("2007-11-02", "2007-11-02", DATE_FORMT));

    System.out.print("\n");

    System.out.printf(
    "2007-11-02 is between of 2007-11-03 and 2007-11-30=%s%n",
    isBetweenOfStartDateAndEndDate(
    "2007-11-03", "2007-11-30", "2007-11-02", DATE_FORMT));
    System.out.printf(
    "2007-11-05 is between of 2007-11-03 and 2007-11-30=%s%n",
    isBetweenOfStartDateAndEndDate(
    "2007-11-03", "2007-11-30", "2007-11-05", DATE_FORMT));

    System.out.printf(
    "2007-11-03 is between of 2007-11-03 and 2007-11-30=%s%n",
    isBetweenOfStartDateAndEndDate(
    "2007-11-03", "2007-11-30", "2007-11-03", DATE_FORMT));
    System.out.printf(
    "2007-11-30 is between of 2007-11-03 and 2007-11-30=%s%n",
    isBetweenOfStartDateAndEndDate(
    "2007-11-03", "2007-11-30", "2007-11-30", DATE_FORMT));
    System.out.printf(
    "2007-12-01 is between of 2007-11-03 and 2007-11-30=%s%n",
    isBetweenOfStartDateAndEndDate(
    "2007-11-03", "2007-11-30", "2007-12-01", DATE_FORMT));
    }

    /**
    * 특정 날짜가 기준 날짜보다 큰가를 검사한다.
    * 기준날짜와 비교할 날짜는 같은 패턴을 가져야 한다.
    *
    * @param basis 기준잘짜
    * @param target 비교할 날짜
    * @param format 기준날짜와 비교할 날짜의 형식화 패턴
    * @return true-비교할 날짜가 기준 날짜보다 크다.
    * @throws ParseException
    * 기준날짜나 비교할 날짜가 해당 형식화패턴과 일치하지 않을 때 발생한다.
    * @author neoburi@nowonplay.com
    */
    public static boolean isBiggerDate(
    String basis, String target, String format) throws ParseException{
    DateFormat df = getSimpleDateFormat(format);
    return parseDate(basis, df).getTime() < parseDate(target, df).getTime();
    }

    /**
    * 특정 날짜가 기준 날짜보다 크거나 같은가를 검사한다.
    * 기준날짜와 비교할 날짜는 같은 패턴을 가져야 한다.
    *
    * @param basis 기준잘짜
    * @param target 비교할 날짜
    * @param format 기준날짜와 비교할 날짜의 형식화 패턴
    * @return true-비교할 날짜가 기준 날짜보다 크거나 같다.
    * @throws ParseException
    * 기준날짜나 비교할 날짜가 해당 형식화패턴과 일치하지 않을 때 발생한다.
    * @author neoburi@nowonplay.com
    */
    public static boolean isEqualsOrBiggerDate(
    String basis, String target, String format)throws ParseException{
    DateFormat df = getSimpleDateFormat(format);
    return parseDate(basis, df).getTime() <= parseDate(target, df).getTime();
    }

    /**
    * 특정 날짜가 어떤 날짜 구간에 존재하는 가를 검사한다.
    * 비교할 날짜와 구간을 시작하는 날짜, 구간이 끝나는 날짜는 같은 패턴을 가져야 한다.
    *
    * @param startBasis 구간의 시작 날짜
    * @param endBasis 구간의 끝날짜
    * @param target 비교할 날짜
    * @param format 날짜의 형식화 패턴
    * @return true-구간 사이에 존재한다. (startBasis <= target <= endBasis)이다.
    * @throws ParseException 각 날짜가 형식화 패턴과 일치하지 않을 때 발생한다.
    * @author neoburi@nowonplay.com
    */
    public static boolean isBetweenOfStartDateAndEndDate(
    String startBasis, String endBasis,
    String target, String format)throws ParseException{
    DateFormat df = getSimpleDateFormat(format);
    Date td = parseDate(target, df);
    return
    parseDate(startBasis, df).getTime() <= td.getTime() &&
    td.getTime() <= parseDate(endBasis, df).getTime();
    }

    /**
    * 어플리케이션이 구동되고 있는 시스템의 현재 날짜가 어떤 날짜 구간에
    * 존재하는가를 검사한다.
    * 구간을 시작하는 날짜, 구간이 끝나는 날짜는 같은 패턴을 가져야 한다.
    *
    * @param startBasis 구간의 시작 날짜
    * @param endBasis 구간의 끝날짜
    * @param format 날짜의 형식화 패턴
    * @return true-구간 사이에 존재한다. (startBasis <= 시스템 현재시간 <= endBasis)이다.
    * @throws ParseException 각 날짜가 형식화 패턴과 일치하지 않을 때 발생한다.
    * @author neoburi@nowonplay.com
    */
    public static boolean isBetweenOfStartDateAndEndDate(
    String startBasis, String endBasis, String format)throws ParseException{
    DateFormat df = getSimpleDateFormat(format);
    long ct = System.currentTimeMillis();
    return
    parseDate(startBasis, df).getTime() <= ct &&
    ct <= parseDate(endBasis, df).getTime();
    }
    /**
    * {@link SimpleDateFormat}의 instance를 반환한다.
    *
    * @param format 형식화 패턴
    * @return java.text.SimpleDateFormat
    * @author neoburi@nowonplay.com
    */
    private static DateFormat getSimpleDateFormat(String format){
    return new SimpleDateFormat(format);
    }

    /**
    * 특정 날짜 형식화 패턴을 기준으로 문자열로 구성된 날짜를 받아 {@link Date}객체를
    * 생성하여 반환한다.
    * 날짜문자열은 반드시 Date Formatter가 보유한 형식화 패턴과 일치하는 패턴이어야 한다.
    *
    * @param date 날짜문자열
    * @param formatter 날짜문자열을 Parsing할 Date Formatter
    * @return {@link java.util.Date}
    * @throws ParseException
    * java.util.Date로 변환할 날짜 문자열이 Date Formatter의 형식화 패턴과 일지하지 않을 때
    * 발생한다.
    * @author neoburi@nowonplay.com
    */
    private static Date parseDate(
    String date, DateFormat formatter)throws ParseException{
    return formatter.parse(date);
    }

    /**
    * 특정 날짜를 받아 {@link Date}객체를 생성하여 반환한다.
    *
    * @param date 날짜문자열
    * @param format 날짜가 보유한 형식화 패턴
    * @return {@link java.util.Date}
    * @throws ParseException
    * java.util.Date로 변환할 날짜 문자열이 형식화 패턴과 일지하지 않을 때 발생한다.
    * @author neoburi@nowonplay.com
    */
    public static Date parseDate(
    String date, String format)throws ParseException{
    return getSimpleDateFormat(format).parse(date);
    }
    /**
    * 특정날짜가 어플리케이션이 구동되고 있는 시스템의 현재 날짜에서 특정시간(밀리초)을
    * 지났는가에 대한 검사를 수행한다.
    *
    * @param date 비교할 날짜
    * @param format 비교할 날짜가 보유한 형식화 패턴
    * @param time 검사할 시간(밀리초)
    * @return true-특정 날짜가 시스템의 현재시간에서 특정 시간(밀리초)만큼 지났음.
    * ((시스템의 현재시간 - 비교날짜의 시간) > 비교시간)이다.
    * @throws ParseException 비교할 날짜가 형식화 패턴과 일치하지 않을 때 발생한다.
    * @author neoburi@nowonplay.com
    */
    public static boolean isLapse(
    String date, String format, long time)throws ParseException{
    DateFormat df = getSimpleDateFormat(format);
    return (System.currentTimeMillis() - parseDate(date, df).getTime()) > time;
    }
    }
  • 너부리
  • 2007-11-03 14:06:02
  • x

Posted by 현수림
TAG java

댓글을 달아 주세요

 

참조 : http://www.javapattern.info/

         http://www.okjsp.pe.kr/

 

자바로 엑셀을 핸들링 할 수 있는 방법은 크게 두가지로 나누어 진다.
1. Java Excel API   
    참조 : http://jexcelapi.sourceforge.net/
2. POI
    참조 : http://jakarta.apache.org/poi/index.html

 

    흔히 POI를 엑셀을 핸들링 하기 위한 것으로만 오해하기 쉬운데,
    POI 프로젝트는 마이크로소프트 OLE 2 복합도큐먼트포맷형식의 파일을 순수 자바를 이용하여 핸들링하는 APIs로 구성되어있다.
    OLE 2 복합도큐먼트포맷형식의 파일은 마이크로소프트 엑셀 혹은 워드파일 등의 대부분의 오피스파일들을 나타낸다.

 

일반적으로 엑셀에 대한 핸들링만을 수행할 때에는 Jxl을 권장한다.
엑셀을 핸들링 할 때 엑셀에서 가장 작은 단위는 알고 있듯이 "셀"이다.
모든 작업은 이 셀을 중심으로 이루어진다.

 

주의할 점)
1) 엑셀 쉬트상에 "C15"라는 셀에 데이터가 있다고 가정하자.( 15행 C열을 나타낸다.)
이 때 Jxl에서는  A1( 1행 A열)부터  C15까지는 실제 데이터가 없을 경우에라도 null이 아닌 빈데이터가 있다고 인식한다.
즉 D열 이상이나, 16행 이상을 접근 할 때에 null로 인식한다.

하지만 POI에서는 C15 이내에 있다 하더라도 실제 데이터가 없을 때에는 null로 인식한다.

2) Jxl에서는 각 셀의 데이터 타입을 실제 엑셀 파일에서 지정된 셀의 타입을 따르고,
   POI에서는 셀의 실제 데이터 형을 따른다.
   예를 들어 특정 셀의 타입을 text 로 잡아놓고, 데이터를 1234로 입력하면
   Jxl에서는 "12345"로 인식하고, POI에서는 12345.00 이런식으로 인식한다.

 

EX ) Java Excel API를 이용한 Excel 읽기

import jxl.*;

// .. 중간생략

    Workbook workbook = null;
    Sheet sheet = null;
    Cell cell = null;

    try
    {
        //엑셀파일을 인식
        workbook = Workbook.getWorkbook( new File( szFileName));

        //엑셀파일에 포함된 sheet의 배열을 리턴한다.
        //workbook.getSheets();

        if( workbook != null)
        {
            //엑셀파일에서 첫번째 Sheet를 인식
            sheet = workbook.getSheet(0);

            if( sheet != null)
            {
                //셀인식 Cell a1 = sheet.getCell( 컬럼 Index, 열 Index);
                //셀 내용 String stringa1 = a1.getContents();

                //기록물철의 경우 실제 데이터가 시작되는 Row지정
                int nRowStartIndex = 5;
                //기록물철의 경우 실제 데이터가 끝 Row지정
                int nRowEndIndex   = sheet.getColumn( 2).length - 1;

                //기록물철의 경우 실제 데이터가 시작되는 Column지정
                int nColumnStartIndex = 2;
                //기록물철의 경우 실제 데이터가 끝나는 Column지정
                int nColumnEndIndex = sheet.getRow( 2).length - 1;

                String szValue = "";

                for( int nRow = nRowStartIndex; nRow <= nRowEndIndex; nRow++ )
                {
                    for( int nColumn = nColumnStartIndex; nColumn <= nColumnEndIndex ; nColumn++)
                    {
                        szValue = sheet.getCell( nColumn, nRow).getContents();

                        System.out.print( szValue);
                        System.out.print( "\t" );
                    }
                    System.out.println();
                }
            }
            else
            {
                System.out.println( "Sheet is null!!" );
            }
        }
        else
        {
            System.out.println( "WorkBook is null!!" );
        }
    }
    catch( Exception e)
    {
        e.printStackTrace();
    }
    finally
    {
        if( workbook != null)
        {
            workbook.close();
        }
    }

EX ) POI를 이용한 Excel 파일 읽기

import org.apache.poi.hssf.usermodel.*;

// .. 중간 생략

    HSSFWorkbook workbook = null;
    HSSFSheet sheet = null;
    HSSFRow row = null;
    HSSFCell cell = null;

    try
    {
        workbook = new HSSFWorkbook( new FileInputStream( new File( szFileName)));

        if( workbook != null)
        {
            sheet = workbook.getSheetAt( 0);

            if( sheet != null)
            {

                //기록물철의 경우 실제 데이터가 시작되는 Row지정
                int nRowStartIndex = 5;
                //기록물철의 경우 실제 데이터가 끝 Row지정
                int nRowEndIndex   = sheet.getLastRowNum();

                //기록물철의 경우 실제 데이터가 시작되는 Column지정
                int nColumnStartIndex = 2;
                //기록물철의 경우 실제 데이터가 끝나는 Column지정
                int nColumnEndIndex = sheet.getRow( 2).getLastCellNum();

                String szValue = "";

                for( int i = nRowStartIndex; i <= nRowEndIndex ; i++)
                {
                    row  = sheet.getRow( i);

                    for( int nColumn = nColumnStartIndex; nColumn <= nColumnEndIndex ; nColumn++)
                    {
                        cell = row.getCell(( short ) nColumn);
                       
                        if( cell == null)
                        {
                            continue;
                        }
                        if( cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC)
                        {
                            szValue = String.valueOf( cell.getNumericCellValue());
                        }
                        else
                        {
                            szValue = cell.getStringCellValue();
                        }

                        System.out.print( szValue);
                        System.out.print( "\t" );
                    }
                    System.out.println();
                }
            }
            else
            {
                System.out.println( "Sheet is null!!" );
            }
        }
        else
        {
            System.out.println( "WorkBook is null!!" );
        }

    }catch(Exception e){
        e.printStackTrace();
    }


EX ) Jxl을 이용하여 Excel에 데이터 저장하기

import jxl.*;

// .. 중간생략

    WritableWorkbook workbook = null;
 WritableSheet sheet = null;

 File excelFile = new File( szFileName);
 Label label = null;

 long start = 0;
   long end = 0;
   
    try
    { 
        for(int i = 0 ; i < 10; i++)
        {
            workbook = Workbook.createWorkbook( excelFile);
            workbook.createSheet("sheet1", 0);
            sheet = workbook.getSheet(0);
            for( int j = 0; j < 10000; j++){
                label = new Label( j, 0, "test cell");
                sheet.addCell( label);
            }

            kidsbook.write();
            kidsbook.close();
        }
    }
    catch( Exception e)
    {
    }

// .. 중간생략


EX ) POI를 이용한 브라우저에서 Excel에 데이터 저장하여 보여주기

import org.apache.poi.hssf.usermodel.*;

// ... 생략

public void writeStream( PTSEvaluation[] arrPTSEvaluation) throws Exception
{
    try
    {

        HSSFWorkbook wb = new HSSFWorkbook();
        HSSFSheet sheet = wb.createSheet( "new sheet");
        HSSFRow row = null;
        HSSFCell cell = null;
        HSSFCellStyle style = null;

        ServletOutputStream excelOut = ServiceContext.getResponse().getOutputStream();
        ServiceContext.getResponse().setHeader( "Content-Disposition", "attachment;filename=EvaluationCompensationList.xls");
        ServiceContext.getResponse().setContentType( MimeType.getMimeType( "xls"));

        //로우 생성
        row = sheet.createRow( ( short)0);
        row.setHeightInPoints( 30);

        //셀에 적용한 스타일을 생성한다.
        style = PTSUtil.setExcelHeaderStyle( wb);

        // 셀 생성
        cell = row.createCell( (short)0);

        //한글 처리
        cell.setEncoding( HSSFCell.ENCODING_UTF_16); 

        //셀에 데이터 입력하기
        cell.setCellValue( "값");

        //셀에 스타일 적용하기
        cell.setCellStyle(style);

        //.. 중간생략 ( 이런 방식으로 로우와 셀을 증가 시키면서 작업을 수행하면 된다.

        wb.write( excelOut);
        excelOut.flush();
    }
    catch( Exception e)
    {
        e.printStackTrace();
        throw e;
    }
    finally
    {
        ServiceContext.getResponse().getOutputStream().close();
    }
}

// ... 생략


출처 : Tong - 퀴비님의 자바통


'Programming > JAVA/JSP' 카테고리의 다른 글

날짜 비교 관련 함수 모음  (0) 2010.03.03
OutOfMemory 해결 방법?  (0) 2010.02.11
Java && Excel 연동  (0) 2010.02.11
파일 Download에 관한 참고  (0) 2010.02.11
JSP 페이징 처리 구현 하기  (0) 2010.02.03
[펌] [Java] replaceAll 로 공백 제거하기  (0) 2009.09.16
Posted by 현수림
TAG java

댓글을 달아 주세요

Int로 선언한 변수로 루프를 돌면서 계속 더하는 로직을 구현했다.
덧셈을 계속 하다 보니 정확히 얼만지는 모르겠지만 어느 정도 규모가 큰 숫자가 되면 값이 음수로 나오더라.

검색해본 결과, Int의 범위는 범위(4 Byte:-2147483648~2147483647) 라서 이 이상은 표현을 못하는 것 같다.

그래서 나온게 BigInteger 다.
이건 무한대의 범위를 표현할 수 있다고 한다.
검색해서 찾아본 바로는 백억도 문안히 표현하더라.

그래서 이걸로 바꿔주고 다시 동작했더니 멀쩡하게 덧셈이 되더라.

아래는 예제 소스



결과

---------------------------------------------------
20

참고링크

[Java/자바] 거대 무한 정수 사칙연산, BigInteger 클래스 사용 법; Big Int Plus Minus 

Posted by 현수림

댓글을 달아 주세요

출처 : http://blog.naver.com/kh2un/60072388264

원본 글 작성자분이 이미지로 올려놓으셔서 보고 타자 치느라 애먹었다.
원본 글과 다른 점은 차트 제목이 추가된 것 뿐이다.
나머지는 전부 같다.

JfreeChart는 다 좋은데 한글때문에 항상 시간 다 뺏기네... -ㅅ-;




Posted by 현수림

댓글을 달아 주세요

출처 : http://falconer.tistory.com/236

세상에 나와 같은 생각을 가지고 있는 분이 또 있다니 반갑구나.
시간날때 직접 해보고 싶어서 퍼왔다.

Posted by 현수림

댓글을 달아 주세요

출처 : http://sunfuture.springnote.com/pages/3554173

● 관련내용 : http://www.okjsp.pe.kr/seq/62218

① 입력된 데이터를 암호화하는 서블릿 작성

파일명 : LocalEncrypter.java

 

② 간단한 입력폼 : InputCode.jsp

이 곳에서 문자열을 입력받아, InputCodeProc.jsp 에서 <jsp:useBean> 을 활용하여 암호화(변조, 복조)를 실시한다.

 

③ 암호화처리 : InputCodeProc.jsp

InputCode.jsp 에서 code 파라메터를 받아내서 LocalEncrypter.java 에서 returnEncryptCode(code); 로 넣어준다.



Posted by 현수림

댓글을 달아 주세요

기분좋을때 사용한다는 파랑색이다.

아래 소스는 정규식을 이용, DB에 있는 데이터를 출력할 때 포함되어 있는 태그를 제거한 후 출력하게 해주는 메서드이다.

역시 Java/Jsp 관련 아티클은 okjsp 가 제일 괜찮은 것 같다.




원본글은 http://okjsp.pe.kr/seq/111879 에서 볼 수 있다.

Posted by 현수림

댓글을 달아 주세요

ChartFX 는 한번 써본 경험이 있었는데, JFreeChart는 처음 사용해 본거라 포스팅 한다.

개인적으로 ChartFX보다는 JFreeChart가 사용하기에 더 쉬운것 같다.

JFreeChart는 jar 파일만 복사해놓고 바로 사용 가능하니깐...

내가 사용한 예제 소스와 라이브러리를 압축한 파일을 첨부한다.

Posted by 현수림

댓글을 달아 주세요

JAVA에서 MS-SQL 스토어드 프로시저 사용하기에 관한 글을 일전에 정리해서 올린적이 있다.

그 내용과 병행해서 보면 더욱 좋다.

이번에 쓸 내용은 프로시저내에서 output 변수로 선언된 값을 JAVA 에서 출력해주는 부분이다.

출처 : http://pcguy7.springnote.com/pages/1044536

CallableStatement
: SQL의 스토어드프로시저(Stored Procedure)를 실행시키기 위해 사용되는 인터페이스 이다.

스토어드프로시저란
: query문을 하나의 파일 형태로 만들거나 데이터베이스에 저장해 놓고 함수처럼 호출해서 사용하는 것임.
 이것을 이용하면 연속되는 query문에 대해서 매우 빠른 성능을 보인다.
 보안적인 장점 역시 가지고 있음.

 

스토어드프로시저로 값을 받아오려면,
호출하기에 앞서 반드시 CallableStatement인터페이스의 registerOutParameter()메서드를 호출해야 함.
 이 인터페이스는 PreparedStatement 인터페이스로부터 상속 받았기 때문에 setXXX()메서드를 사용할 수 있다.

 

(CallableStatement 예제)

CallableStatementTest.java
import java.sql.*;

public class CallableStatementTest{

   public static void main(String[] args){

       try{

          Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

          Connection con = DriverManager.getConnection("jdbc:odbc:dbdsn", "id", "password");

          CallableStatement cs = con.prepareCall("{call myStoredProcedure(?,?,?)}");

          cs.setInt(1,2);

          cs.registerOutParameter(2, java.sql.Types.VARCHAR);

          cs.registerOutParameter(3, java.sql.Types.INTEGER);

          cs.execute();

          System.out.println("*name : "+ cs.getString(2) +"*age : "+ cs.getInt(3));

          cs.close();

          con.close();

       }catch(Exception e){System.out.println(e);}

   }

}
 
C:\JavaExample\19>javac CallableStatementTest.java

C:\JavaExample\19>java CallableStatementTest

*name : Jabook    *age : 2
 

 

MS-SQL에서의 스토어드프로시저 myStoredProcedure 작성구문
 
CREATE PROCEDURE  myStoredProcedure

   @age  int

,   @na varchar(20)  OUTPUT

,   @ageo int           OUTPUT

AS
SELECT  @na = name, @ageo = age  FROM mytest

Where age = @age
 


주의 1. Java의 코드에는 SQL의 query문이 들어가 있지 않았음.
 그리고 위에 정리해 놓은 것처럼, SQL서버 자체에 스토어드프로시저를 작성하여 query를 작성해 놓음.
 위에서 골뱅이(@)가 붙은 것들이 매개변수이고 그 중에서도 뒤에 OUTPUT이라고 붙은 것들이 리턴 될 값. 

 

CallableStatement객체 cs를 생성하여 프로시저를 호출하기 위한 prepareCall()메서드를 사용한다.
 여기서 물음표(?)가 프로시저로 전달되고 받아올 매개변수인 것입니다.

 

         CallableStatement cs = con.prepareCall("{call myStoredProcedure(?, ?, ?)}");

 

 setXXX()메서드를 이용하여 프로시저에 사용할 인자값을 넣어주게 됨.
 그리고 리턴되는 값들을 받아야 겠죠. 일반 메서드와 달리 여러 개의 인자값을 받을 수 있음.
 이때 스토어드프로시저에서 넘어오는 값을 얻기 위해서 registerOutParameter()메서드를 이용하여
 반환되는 값들을 셋팅하게 됩니다.
 

         cs.setInt(1,2);
         cs.registerOutParameter(2, java.sql.Types.VARCHAR);
         cs.registerOutParameter(3, java.sql.Types.INTEGER);

 

반환되는 값을 얻기 위해서는 CallableStatement를 실행한 후 다음과 같이 반환값을 얻어 낼 수 있습니다.

         cs.execute();
         System.out.println("*name : "+ cs.getString(2) +"*age : "+ cs.getInt(3));
 

 CallableStatement인터페이스는 데이터베이스의 스토어드프로시저를 호출하기 위해
prepareCall()메서드를 이용하여 CallableStatement객체를 생성한다.
 그 prepareCall()메서드는 Connection인터페이스의 메서드.
 스토어드프로시저를 실행하기 전에 받아올 값에 대비하기 위해서
registerOutParameter()메서드를 사용하는 주의 할점.

 

 

☞ Callable
   Statement
 데이터베이스의 스토어드프로시저를 실행시키기 위해 사용되는 메서드.

스토어드프로시저를 사용하면 속도, 코드의 독립성, 보안성등의 다양한 이점을 얻을 수 있다.
 

 

CallableStatement인터페이스 주요 메서드
 
public void registerOutParameter(int parameterIndex, int sqlType) throws SQLException
: 프로시저로 받아온 값을 JDBC타입으로 등록.
 모든 받아온 값은 반드시 이 과정을 거쳐야 합니다.
 대표적인 sqlType을 알아보면 NULL, FOLAT, INTEGER, DATE등이 있습니다.

 

*PreparedStatement클래스를 상속하므로 getXXX()등, PreparedStatement가 가지고 있는 메서드를 사할수 있음.

 

 


CallableStatement cs = con.prepareCall("{call myStoredProcedure(?,?,?)}");

          cs.setInt(1,2);

          cs.registerOutParameter(2, java.sql.Types.VARCHAR);

          cs.registerOutParameter(3, java.sql.Types.INTEGER);

          cs.execute();

          System.out.println("*name : "+ cs.getString(2) +"*age : "+ cs.getInt(3));

          cs.close();

registerOutParameter() 이 메소드는 프로시져에서 OUT으로 선언한 변수값


Posted by 현수림

댓글을 달아 주세요

http://www.javajigi.net/

사이트 완전 좋네요!
Posted by 현수림

댓글을 달아 주세요