2013년 8월 9일 금요일
오라클 시퀀스란(oracle sequence)
ORACLE SEQUENCE 개념
- Sequence는 순차적인 일련번호를 생성한다.(최대 38자리의 Oracle정수)
- Sequence는 다중 사용자환경에서 디스크 입출력 오버헤드나 Transaction Locking없이
고유한 순번을 생성하는데 용이하다.
- Sequence생성시 Sequence이름, 오름차순또는 내린차순여부, 번호간격등을 정의한다.
- Sequence번호는 Table과 독립적으로 생성되며,따라서 동일한 Sequence를 하나또는 여러
개의 Table에 사용할수 있다.
B. Sequence생성
- create sequence emp_sequence
increment by 1
start with 1
nomaxvalue
nocycle
cache 10;
cache Optiom은 일련의 Sequence를 미리 할당하고 메모리에 유지하면서 시퀀스를 빠르게 Access
할수있게 한다. 일련의 Sequence를 Cache하면 Sequence를 건너 뛸수있다.
예를들어 Instance가 비정상적으로 종료되면 캐시되었지만 사용안된 Sequence를 잃어버리게 된다.
즉 Cache를 상요하면 Sequence를 빠르게 Access할수 있으나 비정상적으로 종료돨 경우에는 번호가
건너 뛰게된다.
C. Sequence 변경
Alter sequence emp_sequence
Increment by 10
Maxvalue 10000
Cycle
Cache 20;
D. Sequence에 영향을 주는 변수
Sequence_cache_entries매개변수는 캐시될 시퀀스를 설정하다. 너무 낮으면 시퀀스값을 건너
뛸수도 있다. 예를들면 다섯개의 Cache된 Sequence를 사용하고 캐시가 다찼으며,매개변수 값이
4라면 현재 4개의 시퀀스가 Cache되었다면 캐시에서 최근에 가장적게 사용한 Sequence는 5번째
Sequence로 바뀌면서 이 Sequence의 모든 다른값(캐시된 마지막 Sequence까지)은 손실된다.
E. Sequence삭제
- drop sequence emp_sequence;
2013년 8월 8일 목요일
java.awt.Container(Abstract) , ORACLEJAVA 프로그래밍
java.awt.Container(Abstract)
오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의)
java.lang.Object --> java.awt.Component --> java.awt.Container
자신의 영역안에 다른 Component를 포함할수 있는 Component
Container도 Component Class의 하위Class 이므로 그 자체도 Component로 취급되며 다른 Container에 부착될 수 있습니다.
일반적으로 GUI를 만들때는 Component를 Container에 배치하고, 그런 작은 Container를 더 큰 Container에 포함시켜서 GUI를 구성 합니다.
Frame과 Applet은 대표적인 최상위 Container이다. 최상위 Container란 다른 Container를 포함하여 맨 바깥쪽 Container로 사용되는 컨테이너를 지칭 합니다. 이에 비해 Panel은 다른 Container에 부착되어 일부 영역을 Control하는 경우에 사용 됩니다. Window는 많이 사용되지 않으며 하위 Class인 Frame이 많이 사용 됩니다.
Dialog와 FileDialog Container는 대화창에서 주로 사용 됩니다.
컴포넌트를 컨테이너에 추가할 때 색인이 지정되지 않을 경우, 목록 끝(즉, 스택 순서 아래)에 추가 됩니다.
Panel, ScollPane, Window의 상위 클래스
Window클래스나 Window 클래스의 파생클래스(Frame등)는 포함 할 수 없습니다.
Container – component 추가/제거/추출 메소드
add(Component) : 지정된 컴포넌트를 컨테이너의 끝에 추가 합니다.
add(Component, int) : 해당 위치에 있는 컨테이너에 지정된 컴포넌트를 추가 합니다.
add(Component, Object) : 지정된 컴포넌트를 컨테이너의 끝에 추가 합니다.
add(Component, Object, int) : 지정된 색인에서 지정된 제약 조건이 있는 컨테이너에 지정된 컴포넌트를 추가 합니다.
add(String, Component) : 컨테이너에 지정된 컴포넌트를 추가 합니다.
remove(Component) : 컨테이너에서 지정된 컴포넌트를 제거 합니다.
remove(int) : 컨테이너에서 index에 의해 지정된 컴포넌트를 제거 합니다.
remove() : 컨테이너에서 모든 컴포넌트를 제거합니다.
getcomponent(int) : 컨테이너에 있는 n번째 컴포넌트를 가져 옵니다.
getcomponentAt(int, int) : x,y 위치가 포함된 컴포넌트 위치를 찾습니다.
getcomponentAt(Point) : 지정된 지점이 포함된 컴포넌트를 가져 옵니다.
getcomponentCount() : 패널에 있는 컴포넌트의 수를 가져 옵니다.
getComponents() : 컴포넌트에 있는 모든 컴포넌트를 가져 옵니다.
isAncestorOf(Component) : 컨테이너의 컴포넌트 계층구조에 컴포넌트가 포함되어 있는지 확인 합니다.
Container – 그래픽/이벤트와 관련된 메소드
update(Graphics) : 컨테이너를 갱신 합니다.
paint(Graphics) : 컨테이너의 색상을 표시 합니다.
paintComponents(Graphics) : 컨테이너에 있는 각 컴포넌트의 색상을 표시 합니다.
print(Graphics) : 컨테이너를 인쇄합니다.
printComponents(Graphics) : 컨테이너의 각 컴포넌트를 인쇄 합니다.
addContainerListener(ContainerListener) : 컨테이너로부터 컨테이너 이벤트를 수신하기 위해 지정된 컨테이너 수신기(listener)를 추가 합니다.
processContainerEvent(ContainerEvent) : 등록된 ContainerListener 객체로 보내어 컨테이너에서 발생하는 컨테이너 이벤트를 처리 합니다.
processEvent(AWTEvent) : 컨테이너의 이벤트를 처리 합니다.
doLayout() : 컨테이너가 컴포넌트를 배치하도록 합니다.
getLayout() : 컨테이너의 배치 관리 프로그램을 가져 옵니다.
setLayout(LayoutManager) :컨테이너에 대한 배치 관리 프로그램을 설정 합니다.
validate() : 컨테이너와 모든 부속 컴포넌트를 확인합니다. 컨테이너와 하부 컴포넌트를 다시 배치 합니다.
invalidate() : 컨테이너와 모든 부속 컴포넌트가 다시 그려져야 한다고 표시 합니다.
Container – 기타 메소드
addNotify() : 컨테이너가 피어(peer)를 작성하도록 통지 합니다.
getAlignmentX() : x축을 따라 정렬 합니다.
getAlignmentY() : y축을 따라 정렬 합니다.
getInsets() : 컨테이너의 경계 크기를 표시하는 컨테이너의 인세트(inset)를 결정 합니다.
getMaximumSize() : 컨테이너의 최대 크기를 리턴 합니다.
getMinimumSize() : 컨테이너의 최소 크기를 리턴 합니다.
getPreferredSize() : 컨테이너의 선호 크기를 리턴 합니다.
invalidate() : 컨테이너를 무효로 합니다.
list(PrintStream, int) : 지정된 출력 스트림에 컨테이너 목록을 인쇄 합니다.
list(PrintWriter, int) : 지정된 들여쓰기 위치에서 시작하여 지정된 인쇄 작성자로 목록을 인쇄 합니다.
removeNotify() : 컨테이너와 모든 부속 컴포넌트가 피어를 제거하도록 통지 합니다.
------------------------------
java.awt.Panel
--------------------------
다른 Component나 그하위 Component들이 표시될수 있는 장소를 제공하나 , 스스로 화면에 그릴수는 업습니다.
자기를 스스로 그릴수 있는 다른 Window나 그하위의 Frame, Dialog 와 같은 Component에 포함시켜서 사용해야 합니다.
Panel Class에서만 제공하는 주요한 메소드 특별히 없습니다. 결국 다른 Component를 포함할수 있다는 점을 제외하면 Canvas와 별차이가 없다고 할수 있습니다.
Applet Class가 Panel Class를 상속합니다.
Applet은 브라우저창에서 실행되므로 자신을 그릴수 있는 기능을 제공하지 않는 Panel을 상속한다고 볼 수 있습니다.
[예제]
/* 프레임에 Panel을 올리는 예제 */
import java.awt.*;
public class PanelTest extends Frame{
public PanelTest(String s) {
super(s);
}
public static void main(String[] args) {
PanelTest f = new PanelTest("Frame에 Pamel을 넣는예제");
Panel p = new Panel();
f.setSize(300,300);
f.setLayout(null);
p.setSize(150,150);
p.setBackground(Color.blue);
f.add(p);
f.setVisible(true);
}
}
[오라클자바커뮤니티, ORACLEJAVANEW.KR,자바교육]DynaValidatorForm에서 reset하기
public class BoardInsertAction extends BaseActionLogin
{
public ActionForward execute( ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)
{
DynaValidatorForm dForm = (DynaValidatorForm)form;
String title = dForm.get( "title" ).toString();
/*
게시판에 글을 입력하는 내용
*/
// 폼의 값들을 초기화하기 위해 reset함수 호출
dForm.reset( mapping , request );
return (mapping.findForward( "board_search_success" ));
}
}
DynaValidatorForm을 사용했을 경우 위의 경우처럼 reset을 써도
다시 폼으로 돌아가면 예전에 입력했던 값이 남아 있습니다.
ActionForm에서는 reset함수가 먹히지만 DynaValidator폼에서는 폼의 특성상
리셋이 되지 않는 것 같습니다.
입력을 다시 하려고 입력화면에 들어갔는데
예전에 입력한 값이 남아있으면 보기에 좋지 않겠죠?
이런 경우 리셋을 하는대신 폼의 값을 없애 버리면 문제를 해결할수 있습니다.
리셋 함수를 호출하는 대신
dForm.set( "title" , "" );
<= 요렇게 하면 예전에 입력한 값이 보이지 않게 됩니다. ^^
{
public ActionForward execute( ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)
{
DynaValidatorForm dForm = (DynaValidatorForm)form;
String title = dForm.get( "title" ).toString();
/*
게시판에 글을 입력하는 내용
*/
// 폼의 값들을 초기화하기 위해 reset함수 호출
dForm.reset( mapping , request );
return (mapping.findForward( "board_search_success" ));
}
}
DynaValidatorForm을 사용했을 경우 위의 경우처럼 reset을 써도
다시 폼으로 돌아가면 예전에 입력했던 값이 남아 있습니다.
ActionForm에서는 reset함수가 먹히지만 DynaValidator폼에서는 폼의 특성상
리셋이 되지 않는 것 같습니다.
입력을 다시 하려고 입력화면에 들어갔는데
예전에 입력한 값이 남아있으면 보기에 좋지 않겠죠?
이런 경우 리셋을 하는대신 폼의 값을 없애 버리면 문제를 해결할수 있습니다.
리셋 함수를 호출하는 대신
dForm.set( "title" , "" );
<= 요렇게 하면 예전에 입력한 값이 보이지 않게 됩니다. ^^
2013년 8월 2일 금요일
Java Template Method 패턴 예제 , java design pattern
Java Template Method 패턴 예제
오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터

Template Method Pattern
오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크,
안드로이드, 아이폰, 닷넷 실무전문 강의)
www.onjprogramming.co.kr
상위클래스 쪽에 템플릿이 되는 메소드가 정의되어 있고 , 그 메소드의 정의내에는 추상메소드가 사용되너 상위클래스만 보면 추상메소드가 어떤식으로 호출되는지 알수있지만 최종적으로 어떤 처리를 하는지 모른다.
하위클래스에서 어떠한 처리를 하는지에 관계없이 큰 틀은 상위클래스가 결정한데로 처리된다. 실제로 어떤일을 하는지는 하위클래스의 구현된 내용을 봐야 한다.
상위클래스의 템플릿 메소드에 알고리즘이 기술되어 있으므로 하위클래스에서는 알고리즘을 일일이 기술할 필요가 없다. (개개의 하위클래스에 일일이 알고리즘을 기술한다면 수정사항이 발생되면 일일이 개별 하위클래스를 수정해야 한다.)
// AbstractDisplay.java
public abstract class AbstractDisplay {
public abstract void open();
public abstract void print();
public abstract void close();
public final void display() {
open();
for (int i = 0; i < 5; i++) {
print();
}
close();
}
}
// GreetingDisplay.java
public class GreetingDisplay extends AbstractDisplay {
private String s;
public GreetingDisplay(String s) { this.s =s; }
public void open() {
System.out.println("hello " + s);
}
public void print() {
System.out.println("your name is " + s);
}
public void close() {
System.out.println("bye~ " + s);
}
}
// StringDisplay.java
public class StringDisplay extends AbstractDisplay {
private String string;
private int width;
public StringDisplay(String string) {
this.string = string;
this.width = string.getBytes().length;
}
public void open() { printLine(); }
public void print() { System.out.println("|" + string + "|"); }
public void close() { printLine(); }
private void printLine() {
System.out.print("+");
for (int i = 0; i < width; i++) { System.out.print("-"); }
System.out.println("+");
}
}
// Main.java
public class Main {
public static void main(String[] args) {
AbstractDisplay d1 = new GreetingDisplay("이종철");
AbstractDisplay d2 = new StringDisplay("Hello, world.");
AbstractDisplay d3 = new StringDisplay("안녕하세요~");
d1.display();
d2.display();
d3.display();
}
}
상위클래스 쪽에 템플릿이 되는 메소드가 정의되어 있고 , 그 메소드의 정의내에는 추상메소드가 사용되너 상위클래스만 보면 추상메소드가 어떤식으로 호출되는지 알수있지만 최종적으로 어떤 처리를 하는지 모른다.
하위클래스에서 어떠한 처리를 하는지에 관계없이 큰 틀은 상위클래스가 결정한데로 처리된다. 실제로 어떤일을 하는지는 하위클래스의 구현된 내용을 봐야 한다.
상위클래스의 템플릿 메소드에 알고리즘이 기술되어 있으므로 하위클래스에서는 알고리즘을 일일이 기술할 필요가 없다. (개개의 하위클래스에 일일이 알고리즘을 기술한다면 수정사항이 발생되면 일일이 개별 하위클래스를 수정해야 한다.)
// AbstractDisplay.java
public abstract class AbstractDisplay {
public abstract void open();
public abstract void print();
public abstract void close();
public final void display() {
open();
for (int i = 0; i < 5; i++) {
print();
}
close();
}
}
// GreetingDisplay.java
public class GreetingDisplay extends AbstractDisplay {
private String s;
public GreetingDisplay(String s) { this.s =s; }
public void open() {
System.out.println("hello " + s);
}
public void print() {
System.out.println("your name is " + s);
}
public void close() {
System.out.println("bye~ " + s);
}
}
// StringDisplay.java
public class StringDisplay extends AbstractDisplay {
private String string;
private int width;
public StringDisplay(String string) {
this.string = string;
this.width = string.getBytes().length;
}
public void open() { printLine(); }
public void print() { System.out.println("|" + string + "|"); }
public void close() { printLine(); }
private void printLine() {
System.out.print("+");
for (int i = 0; i < width; i++) { System.out.print("-"); }
System.out.println("+");
}
}
// Main.java
public class Main {
public static void main(String[] args) {
AbstractDisplay d1 = new GreetingDisplay("이종철");
AbstractDisplay d2 = new StringDisplay("Hello, world.");
AbstractDisplay d3 = new StringDisplay("안녕하세요~");
d1.display();
d2.display();
d3.display();
}
}
피드 구독하기:
글 (Atom)