레이블이 singleton인 게시물을 표시합니다. 모든 게시물 표시
레이블이 singleton인 게시물을 표시합니다. 모든 게시물 표시

2013년 10월 23일 수요일

(제이쿼리jquery 강좌)jQuery를 통한 키보드 이벤트, keydown, keyup, keypress jQuery를 통한 키보드 이벤트

(제이쿼리jquery 강좌)jQuery를 통한 키보드 이벤트, keydown, keyup, keypress


jQuery를 통한 키보드 이벤트

keydown : 키 눌러질때,   keypress:글자가입력될때
keyup : 키보드가 떨어질 때

<script type="text/javascript">
$(document).ready(function() {
//keydown 이벤트가발생한순간에는글자가입력되어있지않음
//입력한글자수를표시해야하므로keyup 이벤트사용
$("textarea").keyup(function () {
//남은 글자수 구합니다.
var inputLength = $(this).val().length;
var remain = 50 ? inputLength;
//남은 글자수 display
$("h1").html(remain);
//문서객체 색상 변경
if (remain >= 0) {
$("h1").css("color","Blue");
} else {
$("h1").css("color","red")
}
});
});
</script>
<body><div>
<p>지금 내 생각을</p>
<h1>50</h1>
<textarea cols="40" rows="5"></textarea>
</div>
</body>



[기타 다른 강좌는 아래 해당 카테고리를 클릭해주세요]

 

(제이쿼리jquery 강좌)jQuery를 통한 키보드 이벤트, keydown, keyup, keypress jQuery를 통한 키보드 이벤트

(제이쿼리jquery 강좌)jQuery를 통한 키보드 이벤트, keydown, keyup, keypress


jQuery를 통한 키보드 이벤트

keydown : 키 눌러질때,   keypress:글자가입력될때
keyup : 키보드가 떨어질 때

<script type="text/javascript">
$(document).ready(function() {
//keydown 이벤트가발생한순간에는글자가입력되어있지않음
//입력한글자수를표시해야하므로keyup 이벤트사용
$("textarea").keyup(function () {
//남은 글자수 구합니다.
var inputLength = $(this).val().length;
var remain = 50 ? inputLength;
//남은 글자수 display
$("h1").html(remain);
//문서객체 색상 변경
if (remain >= 0) {
$("h1").css("color","Blue");
} else {
$("h1").css("color","red")
}
});
});
</script>
<body><div>
<p>지금 내 생각을</p>
<h1>50</h1>
<textarea cols="40" rows="5"></textarea>
</div>
</body>



[기타 다른 강좌는 아래 해당 카테고리를 클릭해주세요]

 

[자바객체복사배열복사]자바배열(Java Array),배열복사/복제

[자바객체복사배열복사]자바배열(Java Array),배열복사/복제, System.arrayCopy, clone,배열복제,객체복제

 객체는 값의 할당을 원칙으로 함.
배열은 객체임. 일반적인 방법으로 복사되지 않음.
 
 
배열 복사의 두 가지 방법
 
- System.arrayCopy()메서드 이용
 
 
 
public static void arraycopy(Object src , int src_position ,
                  Object dst ,int dst_position ,int length)
Object src : 원본배열
int src_position : 원본배열의 시작위치

Object dst : 복사할 배열
int dst_position : 복사할 배열의 시작위치
int length : 복사할 개수.

- Object클래스의 clone()메서드 이용

메모리를 복사하여 Object형 객체 리턴
원래 타입으로 다운캐스팅 필요
[Clone()메서드로 객체복사 시 주의점]
Cloneable인터페이스 구현필요
배열은 이미 구현되어 쓸 구현 필요 없음
 
int[] mytarget = (int[])mydream.clone();
 
[예1]

public class ArrayTest {
   public static void main(String[] args) {
  
   int[] onjoraclejava  = new int[]{5, 4, 6, 9, 7, 9};   
      int[] target = {10, 20, 30, 40, 50, 60,70, 80};
     
      System.arraycopy(onjoraclejava, 2, target, 3, 4);
     
      for(int i=0; i<target.length; i++)
      {
         System.out.println("target["+i+"] : " + target[i]);
      }
   }
}

[결과]
 
target[0] : 10
target[1] : 20
target[2] : 30
target[3] : 6
target[4] : 9
target[5] : 7
target[6] : 9
target[7] : 80
 
[예2]
 
public class CloneTest {
   public static void main(String[] args) {
      int[] oraclejavanew  = new int[]{1, 4, 6, 9};
      int[] target = (int[])oraclejavanew.clone(); 
      for(int i=0; i<target.length; i++)
      {
         System.out.println("target["+i+"] : " + target[i]);
      }
   }
}
 
[결과]
 

target[0] : 1
target[1] : 4
target[2] : 6
target[3] : 9

[ORACLE 외부파일 BFILE 강좌]BFILE을 이용하여 이미지를 DB에 저장/저장된 BFILE을 이용하여 새로운 이미지 생성

 [ORACLE 외부파일 BFILE 강좌]BFILE을 이용하여 이미지를 DB에 저장/저장된 BFILE을 이용하여 새로운 이미지 생성



BFILE을 이용하여 이미지를 DB에 저장/저장된 BFILE을 이용하여 새로운 이미지 생성

아래의 두 PL/SQL 프로시저는 OS의 binary file을 DB의 BFILE 컬럼과 연계하여 작업을 하는 예제 입니다.

Load_BFILE_FROM_Image 프로시저

이 프로시저는 디스크 상의 이미지 파일을 BFILE 컬럼에 저장하는 역할을 합니다. 이 프로시저는 SQL문장안에서 BFILENAME 함수를 사용 하여 BFILE 컬럼을 UPDATE 합니다. 여기서 주의 할 점은 이미지가 디스크 상에 존재 할 뿐 DB에는 저장 되지 않는 다는 것을 명심해야 합니다. 즉 BFILE 컬럼은 OS상의 파일에 대한 포인터를 저장 한다고 보면 됩니다.


Write_BFILE_To_File 프로시저

이 프러시저는 그래픽 파일 등을 내용을 기 저장된 BFILE 참조를 이용하여 어떻게 다시 디스크에 쓰는지에 대해 예를 들고 있습니다. 이때 UTL_FILE.PUT_RAW 프로시저를 이용하여 BFILE 컬럼의 포인터를 읽어 하나씩 디스크에 기록 하게 됩니다.

또한 DBMS_LOB.READ 함수를 이용하여 BFILE 참조로부터 낱낱이 읽어 들여 이를PL/SQL RAW 변수에 넣습니다.

아래의 예를 참고 합니다.

1.        테스트를 위한 테이블, 디렉토리를 만듭니다.

SQL> CREATE TABLE test_bfile (
  2        id          NUMBER(15)
  3      , file_name    VARCHAR2(1000)
  4      , image        BFILE
  5      , timestamp    DATE
  6  )
  7  /

테이블이 생성되었습니다.

SQL> CREATE OR REPLACE DIRECTORY
  2      EXAMPLE_LOB_DIR
  3      AS
  4  'd:\LOBs'
  5  /

디렉토리가 생성되었습니다.


2.        Load_BFILE_From_Image 프러시저를 만듭니다.
(d:\LOBs 폴더에 oraclejava_logo.gif 파일을 복사해 둡니다. 파일 이름은 적절히 수정 하시면 됩니다)

CREATE OR REPLACE PROCEDURE Load_BFILE_From_Image
IS
BEGIN
    DBMS_OUTPUT.ENABLE(100000);
    INSERT INTO test_bfile (id, file_name, image, timestamp)
        VALUES (1001, 'oracle9i_logo.gif', null, sysdate);
    UPDATE test_bfile
        SET image = BFILENAME('EXAMPLE_LOB_DIR', 'oraclejava_logo.gif')
        WHERE id = 1001;
END;


3.        Write_BFILE_To_File 프러시저를 만듭니다.


  CREATE OR REPLACE PROCEDURE Write_BFILE_To_File
  IS
    source_pic      BFILE;
    buffer          RAW(32767);
    buffer_size    CONSTANT BINARY_INTEGER := 32767;
    amount          BINARY_INTEGER;
    offset          NUMBER(38);
    file_handle    UTL_FILE.FILE_TYPE;
    directory_name  CONSTANT VARCHAR2(80) := 'EXAMPLE_LOB_DIR';
    image_filename  CONSTANT VARCHAR2(80) := 'oraclejava_logo2.gif';
    dest_pic        BFILE;
  BEGIN
      DBMS_OUTPUT.ENABLE(100000);
      -- -----------------
      -- GET BFILE LOCATOR
      -- -----------------
      SELECT image INTO source_pic
          FROM test_bfile
          WHERE id = 1001;
      -- ---------------------------------------
      -- OPEN ORIGINAL BFILE IMAGE USING LOCATOR
      -- ---------------------------------------
      DBMS_LOB.FILEOPEN(
          file_loc  => source_pic,
          open_mode  => DBMS_LOB.FILE_READONLY);
      -- ---------------------------------
      -- OPEN NEW IMAGE FILE IN WRITE MODE
      -- ---------------------------------
      file_handle := UTL_FILE.FOPEN(
          location    => directory_name,
          filename    => image_filename,
          open_mode    => 'w',
          max_linesize => buffer_size);
      amount := buffer_size;
      offset := 1;
      -- ---------------------------------------------------
      -- READ FROM BFILE IMAGE / WRITE OUT NEW IMAGE TO DISK
      -- ---------------------------------------------------
      WHILE amount >= buffer_size
      LOOP
          DBMS_LOB.READ(
              file_loc  => source_pic,
              amount    => amount,
              offset    => offset,
              buffer    => buffer);
          offset := offset + amount;
          UTL_FILE.PUT_RAW(
              file      => file_handle,
              buffer    => buffer,
              autoflush => false);
      END LOOP;
      UTL_FILE.FCLOSE(file => file_handle);
      DBMS_LOB.FILEOPEN(file_loc => source_pic);
      -- --------------------------------------------
      -- INSERT THE NEW IMAGE FILE AS A SECOND RECORD
      -- --------------------------------------------
      INSERT INTO test_bfile (id, file_name, image, timestamp)
          VALUES (1002, 'oraclejava_logo2.gif', null, sysdate);
      UPDATE test_bfile
          SET image = BFILENAME('EXAMPLE_LOB_DIR', 'oraclejava_logo2.gif' )
          WHERE id = 1002;
      COMMIT;
* END;
  /

프로시저가 생성되었습니다.

4.        SQL*Plus 에서 테스트 합니다.

SQL> set serveroutput on
SQL> exec Load_BFILE_From_Image

PL/SQL 처리가 정상적으로 완료되었습니다.

SQL> exec Write_BFILE_To_File

PL/SQL 처리가 정상적으로 완료되었습니다.

SQL>
SQL>
SQL> SELECT id, DBMS_LOB.GETLENGTH(image) Length FROM test_bfile;

        ID    LENGTH
---------- ----------
      1001        910
      1002        916

참고) 이제 탐색기에서 보면 oraclejava_logo2.gif가 생겨 났음을 확인 할 수 있습니다. 그런데 이 파일은 원래의 oraclejava_logo.gif 보다 사이즈가 조금 큰데 그 이유는 UTL_FILE.PUT_RAW 프러시저에서 CR/LF가 추가 되어서 그러합니다.

오라클자바커뮤니티에서 설립한 개발자교육6년차 오엔제이프로그래밍 실무교육센터(오라클SQL,튜닝,힌트,자바프레임워크,안드로이드,아이폰,닷넷 실무개발강의)  


[기타 다른 강좌는 아래 해당 카테고리를 클릭해주세요]

2013년 9월 9일 월요일

자바FTP,자바교육,자바강좌,오엔제이프로그래밍,자바로 만든 FTP 클라이언트(파일업로드예)

자바FTP,자바교육,자바강좌,오엔제이프로그래밍,자바로 만든 FTP 클라이언트(파일업로드예)


FTP를 위한 컴포넌트는 http://www.savarese.org/downloads/NetComponents/ 에서 다운 받으시구요...

/**------------------------------------------------------------------------------------
  * 시스템명 : FTP Client
  * 작 성 자 :
  * 수 정 자 : 이종철(오엔제이프로그래밍실무교육센터,오라클자바커뮤니티)
  * 파 일 명 : OracleJavaFtpClient.java
  * 버    전 : 1.3
  * 개    요 :파일을 FTP서버의 Log 폴더에 저장한다.
   *-----------------------------------------------------------------------------------*/


package new_OracleJava.util;

import java.io.*;
import new_OracleJava.engine.OracleJavaConfig;
import com.oroinc.net.ftp.*;


public class OracleJavaFtpClient{
    static String server = "xxx.xxx.xxx.xxx";
    static int port = 21;
    public static String id = "id"
    public static String password = "pwd"
   
    FTPClient ftpClient = null;

    public OracleJavaFtpClient() {     
            ftpClient = new FTPClient();
    }

    public void sendFile() {
           
            try {                                                 
                    boolean res = false;
            String MyFile = "/use/local/logs/a.log";         
               
            File f = new File(MyFile);

            BufferedInputStream bi = new BufferedInputStream(new FileInputStream(f.getPath()));
            ftpClient.setFileType(FTP.BINARY_FILE_TYPE); 
           
            //FTP 서버의 폴더...
            ftpClient.changeWorkingDirectory("/ftpserver/usr/local");
           
            if (bi != null) {
              res = ftpClient.storeFile(OracleJavaConfig.libSystemChkFileName, bi);
            }         
            else {
                    System.out.println("FileStrema 생성 오류!!!");
            }
           
            bi.close();
                       
            //ftpClient.storeFile(OracleJavaConfig.libWAS2FTPPath, new FileInputStream(new File(MyFile)));
            if (res) {
                    Log.println("OracleJavaSystemChkThread", "FTP 전송 OK~~~");
                    System.out.println("FTP 전송 OK~~~");
            }
            else {
                    Log.println("OracleJavaSystemChkThread", "FTP 전송 실패~~~");
                    System.out.println("FTP 전송 실패~~~");
            }
                //ftp.logout();
                //ftp.disconnect(); 
                //ftp = null;
            }
            catch(Exception e) {
                Log.println("OracleJavaSystemChkThread", "*******************************************************************************");
          Log.println("OracleJavaSystemChkThread", "******************************** Exception FTP Send****************************");
          Log.println("OracleJavaSystemChkThread", "*******************************************************************************");
          Log.println("OracleJavaSystemChkThread", e.toString() + "\n");
            }
    }

    // 계정과 패스워드로 로그인
    public boolean login(String user, String password) {
        try {
            //this.connect();
            return ftpClient.login(user, password);
        }
        catch (IOException ioe) {
            ioe.printStackTrace();
        }
        return false;
    }

    // 서버로부터 로그아웃
    public boolean logout() {
        try {
            return ftpClient.logout();
        }
        catch (IOException ioe) {
            ioe.printStackTrace();
        }
        return false;
    }

    // 서버로 연결
    public void connect() {
        try {
           
            ftpClient.connect(server, port);           
            int reply;
            // 연결 시도후, 성공했는지 응답 코드 확인
            reply = ftpClient.getReplyCode();
       
            if(!FTPReply.isPositiveCompletion(reply)) {
                ftpClient.disconnect();               
                Log.println("OracleJavaSystemChkThread", "*************************************************");
                Log.println("OracleJavaSystemChkThread", "서버로부터 연결을 거부당했습니다\n");
                Log.println("OracleJavaSystemChkThread", "************************************************");
                System.exit(1);
            }
        }
        catch (IOException ioe) {
            if(ftpClient.isConnected()) {
                try {
                    ftpClient.disconnect();
                } catch(IOException f) {
                    //
                }
            }
            Log.println("OracleJavaSystemChkThread", "*************************************************");
            Log.println("OracleJavaSystemChkThread", "서버 연결 불가!!\n");
            Log.println("OracleJavaSystemChkThread", "************************************************");           
        }

// FTP의 ls 명령, 모든 파일 리스트를 가져온다
    public FTPFile[] list() {
        FTPFile[] files = null;
        try {
            files = this.ftpClient.listFiles();
            return files;
        }
        catch (IOException ioe) {
            ioe.printStackTrace();
        }
        return null;
    }

    // 파일을 전송 받는다
    public File get(String source, String target) {
        OutputStream output = null;
        try {
            File local = new File(source);
            output = new FileOutputStream(local);
        }
        catch (FileNotFoundException fnfe) {
            fnfe.printStackTrace();
        }
        File file = new File(source);
        try {
            if (ftpClient.retrieveFile(source, output)) {
                return file;
            }
        }
        catch (IOException ioe) {
            ioe.printStackTrace();
        }
        return null;
    }


    }

    // 서버로부터 연결을 닫는다
    public void disconnect() {
        try {
            ftpClient.disconnect();
        }
        catch (IOException ioe) {
            ioe.printStackTrace();
        }
    }

}




=======================================================
=======================================================

다른 자바 프로그램에서... 다음과 같이 호출하여 이용했습니다.

                OracleJavaFtpClient ftpClient = new OracleJavaFtpClient();               
                ftpClient.connect();
                ftpClient.login(OracleJavaFtpClient.id, OracleJavaFtpClient.password);
                ftpClient.sendFile();
                ftpClient.logout();
                ftpClient.disconnect();



오라클자바커뮤니티 실전 개발 교육 - 개인80% 환급

Spring3.X, MyBatis, Hibernate실무과정

강좌명 Spring3.X, MyBatis, Hibernate실무과정(평일야간)
오라클자바커뮤니티(www.oraclejavanew.kr) 추천 실전강좌
교재 자체교재 or PDF 파일 제공
강좌 일정 09월12일(목) ~ 10월04일(금)((평일야간) 19:00~22:00, 12일) 총 36시간
강의 장소 [C강의장]구로디지털단지역2번 출구-> 미니스톱끼고 우회전 -> 100m 직진 후 골목길 끝에서 이마트방향 우회전 -> 50m 직진 후 우체국 옆골목으로 길건너서 직진 -> 150미터 직진 후 JnK 타워에서 우회전 -> 50미터 직진 후 우측에 코오롱빌란트2차 803호 (구로구 구로3동 222-8 코오롱디지털타워 빌란트2차 803호)
[약도보기]
수강절차 - 강좌내용 확인
- 전화 또는 홈페이지(www.onjprogramming.co.kr)를 통한 수강지원 및 수강료 결제(무통장입금, 온라인 카드결제)
- 고용보험 가입자(재직자)인 경우 고용보험환급 관련 서류 제출
- 수강전 : 커리큘럼 및 장소에 대해 다시 한번 공지
- 교육 전 설문 작성(간단한 개발 경력, 수강 목적, 강좌진행방식 등)
- 강좌 수강
- 수강후 : 교육 후 설문 작성
수강료 - 590,000원
[고용주환급]대기업:14만원 전후, 중소기업:187,047 원환급

[개인수강지원(개인환급)]정규직 472,000 ,비정규직:전액환급
대기업(상시근로자 300인 이상 대기업)은 개인환급 불가합니다.

재직자 내일배움카드 : 정부지원금 80% 자기부담금 20%
(구 능력개발카드 명칭이 내일배움카드로 변경 / 연간 총한도 200만원)


* 휴강 :법정공휴일
수강료
입금안내
- 온/오프라인 카드결제, 계좌이체(수강안내->입금안내 참조)
문의사항 02-851-4790 번으로 연락 부탁 드립니다.
교육개요 본과정은 자바 웹개발에서 가장 많이 사용되고 있는 자바기반 프레임워크인 Spring3.2를 학습하는데 스프링이 왜 도입되어야 하는지부터, 기본모듈구성, 아키텍처 DI, DL, IoC, 최근 개발모델의 핵심인 Spring AOP, AspectJ Annotation, 표현언어인 SpEL, Spring MVC, Spring MVC TEST Framework, Spring WebFlow, Spring JDBC, Spring Transaction등 개발에 필요한 부분을 체계적으로 실습을 통해 학습하며 SQLMapper인 MyBatis, Hibernate 까지 학습하는 Spring 최고의 교육 입니다.

[특징]
- 실무/실습에 근거한 이론 취득
- 단기간에 스프링 개발자로 양성
- 문답씩 수업으로 수강 효과 극대화
- 이론/실습 과제로 인한 개발력 UP
교육목표 - Spring의 도입배경 및 아키텍처에 대해 이해한다.
(자바빈의 태동부터 EJB, 그리고 현재까지)
- Eclipse, Maven, STS 플러그인에 대한 이해
(개발환경 설정의 이해)
- Spring IoC(DI, DL)의 이해
(실습을 통한 setter,getter,constructor injection의 이해)
- Spring AOP의 이해
(실습을 통한 Spring AOP의 이해, AOP어렵지 않습니다)
- AspectJ Annotation에 대한 이해
(Spring의 AspectJ 지원 및 Annotation 대한 이해 by 실습)
- Spring Web MVC, JDBC의 이해
(실습을 통한 Spring MVC, JDBC의 이해)
- Spring Controller에 대한 이해
(간단한 Controller의 구현을 통한 MVC Font Contrller의 이해)
- Spring Web Flow에 대한 이해
(실습을 통한 Spring Web Flow 및 JSF에 대한 이해)
- SpEL에 대한 이해
(실습을 통한 Spring SpEL의 이해)
- Servlet3 비동기 요청에 대해 이해한다.
(실습을 통한 비동기 서블릿에 대한 이해)
- MyBatis Mapper에 대해 이해한다.
(실습을 통한 MyBatis 구성, 작동원리 이해)
- Hibernate Mapper에 대해 이해한다.
(실습을 통한 Hibernate 구성, 작동원리 이해)
- 실무 개발 환경에 적응력 UP
(Spring, MyBATIS 기반 게시판 작성)
교육대상 - JAVA, JSP 개발자
- 자바개발은 오래 했지만 프레임워크에 대해 자신이 없는 개발자
- 단기간에 스프링을 박살 내고 싶은 개발자.
(스프링 혼자 공부하기는 어렵습니다!!)
선수학습 - JAVA, JSP
 

Spring3.2 J2EE Framework에 대한 흐름과 Spring Framework에 대한 이해
개발 환경 설정(Eclipse4.3 KEPLER, Tomcat7, Spring3.2 다운로드 및 설치)
Maven, STS 플러그인 설치
Spring IoC
DL(Dependency LookUp) &DI(Dependency Injection)
Dependency Pull, CDL(Contaxtualized Lookup)
Setter/Constructor/Mathod Injection
Spring 설정
Spring AOP 란 ?Code, Advice, JoinPoint, PointCut, Aspect, WeavingProxyFactoryBean
Annotation기반 AOP(AspectJ)
기타 Spring의 선언적 AOP 선언
Spring JDBC
Spring MVC
Spring Controller
Spring Webflow, JSF
Spring 표현언어 SpEL
Servlet3 비동기 요청처리
Spring3.2 Transaction 관리
Spring MVC TEST Framework
MyBatis/hibernate [MyBatis]
개요 및 소개
개발환경 설정 및 설치
Data Mapper란
sqlMapConfig 이해 및 환경설정
Spring, MyBatis 연동
SQL Map XML File 이해
SqlMapClient 이해
SQL의 실행(Insert/update/delete) 이해와 실습
고급 쿼리 사용방법의 이해와 실습
Spring MyBatis 응용예제 작성

[Hibernate]
Hibernate 소개
SessionFactory 설정
1:1, 1:다 매핑
Session Interface
Hibernate DML
Spring, Hibernate 예제 프로그램 작성

2013년 8월 10일 토요일

[오라클자바,오라클자바커뮤니티]Oracle Types of Data Integrity

Oracle Types of Data Integrity

A. Nulls
- 기본적으로 Column은 Null을 허용한다. 
Column에 대해서 null을 포함하는 row들의 insert나 또는 update를 허용하는 또는 허용하지 않는  하나의 column에 대해서 정 의되는 규칙.

B. Unique Column Values
-Column(또는 column들의 집합)에 대해서 unique value를 포함하는 row들의 insert나 또는  update만을 허용하는 column들(또는 column들의 집합)에 대해서 정
의되는 규칙, 즉 지정된 열또는 열들에서중복된 값을 허용안함

- Unique 제약조건을 구성하는 열중 일부분이 Null을 허용한다면 Null을 허용하지 않는 열은  동일한 값을 가질수 없다.

C. Primary Key Values
-Table에 있는 각 row는 column(또는 column들의 집합)에 있는 value들에 의해서 유일하게 식별될 수 있도록 하는 하나의 column(또는 column들의 집합)에 정의된
규칙.

- Primary Key Column은 Null을 허용하지 않는다.

- 만약 dept Table의 dept_no Column이 Primary Key라면 해당열에 대한 고유 인덱스를 암시적으로  생성하며 해당열에대해 not null제약조건을 암시적으로 생성한다.

- Primary Key Column은 16개 까지로 제한됨

D. Referential Integrity(참조 무결성)과 Foreign Key 무결성 제약조건
- 만약 Column 또는 column들의 집합에 대한 값(the dependent value)이 관련된 table의 column에 있는 값(the referenced value)과 match 된다면 하나의 row에
대한 insert 또는 update만을 허용하는 하나의 table에 존재하는 column(또는 column들의 집합)에 대해서 정의된 규칙.

-Referential integrity는 또한 어떤 data 조작의 유형이 참조되는 값들에 허용되는 지와 이러한 action들이 종속된 값들에 어떠한 영향을 주는 지를 지시하는 규칙들을 포함한다. 

Restrict
 참조되는 data의 update 또는 deletion을 허용하지 않는 referential
integrity.

Set to Null
 참조되는 data가 update되거나 delete될 때, 관련되는 모든 종속된 data는 NUll이 설정된다.

Set to Default
 참조되는 data가 update되거나 delete될 때, 관련되는 모든 종속된 data는 default value가 설정된다.

Cascade
 참조되는 data가 update될 때, 관련되는 모든 종속된 data도 update된다; 참조되는 row가 delete될 때, 관련되는 모든 종속된 row들도 delete된다.

F. Check Constrints
- 각 열또는 열집합에 대한 Check Constraints는 지정된 조건이 참인지 거짓인지 알수있게 한다.

- 사용자가 확인 조건을 지정함으로서 특수하거나 복잡한 무결성 조건을 시행한다.

- 문자열 리터럴이나 인수(투캐랙터, 투넘버, 투데이트)로 NLS 매개변수를 가지는 SQL을 포함한는  제약조건을 평가하기 위해 Oracle은 기본적으로 DataBase의 NLS설정값을 사용한다.

2013년 8월 2일 금요일

JAVA

"자바 디자인 패턴 입문" 이라는 책의 내용을 정리하여 올립니다.

시스템내에 단 한 개만 존재하는 것을 프로그램으로 표현시 클래스의 인스턴스를 하나만 만든다.
 지정한 클래스의 인스턴스가 하나만 존재하고 이를 프로그램 상에서 보장하는 패턴을 Singleton Pattern이라 한다.
 다수의 인스턴스가 존재하는 경우 상호간에 영향을 주어 예기치 못한 오류가 발생할 확률이 높으므로 이를 제한하는 경우에 사용



 예제의 Singleton Class는 인스턴스를 하나만 만들고 static으로 singleton이 정의되어 클래스가 메모리에 로드될때 한번 초기화 된다. 

오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의) 


생성자가 private으로 되어 있으므로 외부에서 new Singleton()을 하게되면 컴파일 시에 오류가 발생한다.Singleton 패턴의 경우 개발자가 부주의 하더라도 인스턴스는 하나만 존재


// Singleton.java
public class Singleton {
    private static Singleton singleton = new Singleton();
    private Singleton() {
        System.out.println("인스턴스 생성!");                   
    }
    public static Singleton getInstance() {       
        return singleton;
    }                                         
}


//Main.java
public class Main extends Thread {
    public static void main(String[] args) {
        System.out.println("Start.");       
    Singleton obj1 =    Singleton.getInstance();
      Singleton obj2 = Singleton.getInstance();
        if (obj1 == obj2){
System.out.println("obj1 == obj2");
        }
        else { System.out.println("obj1 != obj2");
        }
    }
}