2014년 5월 29일 목요일

웹서버에파일이 존재하는지확인, HttpURLConnection URL.openConnection[자바개발자교육/자바교육/자바강좌/자바,Spring교육잘하는곳/자바,spring교육추천/자바실무교육/JAVA/JAVA교육/JAVA스프링학원/JAVA실무교육] 가끔은 웹서버에 어떤 파일이 존재하는지 확인해 볼 경우가 있다. 아래 예제는 그러한 경우 간단하게 사용할 수 있는 예제다. 참고하자. package onj;:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> import java.net.*; public class CheckWebPage { public static void main(String s[]) { System.out.println(isExists("http://www.oraclejavacommunity.com/a.gif")); System.out.println(isExists("http://www.oraclejavacommunity.com/onj/main/main.html")); } static String isExists(String URLName) { try { // Sets whether HTTP redirects (requests with response code 3xx) // should be automatically followed by this class. True by default. HttpURLConnection.setFollowRedirects(false); /** HTTP 요청 메소드 SET * 본 예제는 파일의 존재여부만 확인하려니 간단히 HEAD 요청을 보냄 * HEAD요청에 대해 웹서버는 수정된 시간이 포함된 리소스의 해더 정보를 간단히 리턴 * GET,POST,HEAD,OPTIONS,PUT,DELETE,TRACE 값등이 올 수 있다. * 디폴트는 GET **/ HttpURLConnection con = (HttpURLConnection) new URL(URLName).openConnection(); con.setRequestMethod("HEAD"); //FILE이 있는 경우 HTTP_OK 200 if (con.getResponseCode() == HttpURLConnection.HTTP_OK) { return URLName + " 파일 있음!"; } else { return URLName + " 파일 없음!"; } } catch (Exception e) { e.printStackTrace(); return URLName + " 파일 없음"; } } } [결과] http://www.oraclejavacommunity.com/a.gif 파일 없음! http://www.oraclejavacommunity.com/onj/main/main.html 파일 있음! [출처] 오라클자바커뮤니티 - http://www.oraclejavacommunity.co.kr/bbs/board.php?bo_table=LecJavaNet&wr_id=91 오라클자바커뮤니티교육센터, 개발자전문교육, 개인80%환급 www.oraclejavacommunity.com 평일주간(9:30~18:20) 개강 (6/09)[기업100%환급]SQL기초에서 Schema Object까지 (6/09)[기업100%환급]PL/SQL,ORACLE HINT,TUNING (6/09)[기업100%환급]Spring ,MyBatis,Hibernate실무과정 (6/16)[기업100%환급]안드로이드개발자과정 (6/16)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍 (6/16)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지 (6/23)[교육전취업확정,채용예정자교육]Spring,MyBatis,XPlatform실무프로젝트과정 평일야간(19:00~21:50) 개강 (6/03)안드로이드개발자과정 (6/03)웹퍼블리싱 마스터 (6/09)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지 (6/10)C#4.0, ADO.NET, Network 프로그래밍 (6/10)Spring3.X, MyBatis, Hibernate실무과정 (6/18)C#,ASP.NET마스터 (6/26)SQL초보에서실전전문가까지 주말(10:00~17:50) 개강 (5/31)Spring3.X, MyBatis, Hibernate실무과정 (5/31)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지 (5/31)SQL초보에서실전전문가까지 (5/31)C#,ASP.NET마스터 (6/14)실무예제로 배워보는 jQuery(개발자/디자이너를위한) (6/14)안드로이드개발자과정 주말저녁(18:30~22:20) 개강 (6/21)JAVA,Network&WEB&Framework (6/21)SQL기초에서실무까지

웹서버에파일이 존재하는지확인, HttpURLConnection URL.openConnection[자바개발자교육/자바교육/자바강좌/자바,Spring교육잘하는곳/자바,spring교육추천/자바실무교육/JAVA/JAVA교육/JAVA스프링학원/JAVA실무교육]



가끔은 웹서버에 어떤 파일이 존재하는지 확인해 볼 경우가 있다.
아래 예제는 그러한 경우 간단하게 사용할 수 있는 예제다.
 
참고하자.
 
package onj;:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
 
import java.net.*;
 
public class CheckWebPage {
 
       public static void main(String s[]) {
            System.out.println(isExists("http://www.oraclejavacommunity.com/a.gif"));
              System.out.println(isExists("http://www.oraclejavacommunity.com/onj/main/main.html"));
       }
 
       static String isExists(String URLName) {
             try {
                   
                    // Sets whether HTTP redirects  (requests with response code 3xx)
                    // should be automatically followed by this class.  True by default.
                    HttpURLConnection.setFollowRedirects(false);
                   
                    /** HTTP 요청 메소드 SET
                     *  예제는 파일의 존재여부만 확인하려니 간단히 HEAD 요청을 보냄
                     * HEAD요청에 대해 웹서버는 수정된 시간이 포함된 리소스의 해더 정보를 간단히 리턴
                  *  GET,POST,HEAD,OPTIONS,PUT,DELETE,TRACE 값등이  있다.
                  * 디폴트는 GET
                  **/                 
                    HttpURLConnection con = (HttpURLConnection) new URL(URLName).openConnection();
                    con.setRequestMethod("HEAD");
                   
                    //FILE 있는 경우 HTTP_OK 200
                    if (con.getResponseCode() == HttpURLConnection.HTTP_OK) {
                           return URLName + 파일 있음!";
                    } else {
                           return URLName + 파일 없음!";
                    }
             } catch (Exception e) {
                    e.printStackTrace();
                    return URLName + 파일 없음";
             }
       }
}
 
[결과]
 
http://www.oraclejavacommunity.com/a.gif 파일 없음!
http://www.oraclejavacommunity.com/onj/main/main.html 파일 있음!

[자바디자인패턴]템플릿 메소드 패턴(Template Method Pattern),자바교육은 오라클자바커뮤니티에서

[자바디자인패턴]템플릿 메소드 패턴(Template Method Pattern),자바교육은 오라클자바커뮤니티에서

상위 클래스쪽에 템플릿에 해당하는 메소드가 정의되어 있고,그 메소드의 정의 안에는 추상 메소드가 사용되고 있어 상위 클래스의 프로그램만 보면 추상 메소드를 어떻게 호출 하고 잇는지 알 수 있지만 최종적으로 어떤 처리가 수행되는지는 알 수 없다.

상위클래스의 추상 메소드를 실제로 구현하는 것은 하위 클래스 이다. 하위 클래스 측에서 메소드를 구현하면 구체적인 처리가 결정되고 서로 다른 하위 클래스가 서로 다른 구현을 실행하면 서로 다른 처리가 실행된다. 그러나 어떤 하위 클래스에서 어떤 구현을 하더라도 처리의 뼈대를 결정하고 하위 클래스에서 그 구체적인 내용을 결정하는 디자인 패턴을 Template Method Pattern이라 한다.


package factory;

//AbstractDisplay.java
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
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
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 TemplateMethodTest {
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();
}
}


[결과]

hello 오라클자바커뮤니티
your name is 오라클자바커뮤니티
your name is 오라클자바커뮤니티
your name is 오라클자바커뮤니티
your name is 오라클자바커뮤니티
your name is 오라클자바커뮤니티
bye~ 오라클자바커뮤니티
+---------------+
|Hello, world~~~|
|Hello, world~~~|
|Hello, world~~~|
|Hello, world~~~|
|Hello, world~~~|
+---------------+
+----------------+
|안녕하세요~|
|안녕하세요~|
|안녕하세요~|
|안녕하세요~|
|안녕하세요~|
+----------------+






 

[자바디자인패턴]팩토리 메소드 패턴(Factory Method Pattern),오라클자바커뮤니티 자바디자인패턴강좌

[자바디자인패턴]팩토리 메소드 패턴(Factory Method Pattern),오라클자바커뮤니티 자바디자인패턴강좌

객체지향 디자인 패턴이란 소프트웨어 설계 시 특정 상황에서 자주 만나는 문제를 해결하기 위해 사용할수 있는 재사용 가능한 솔루션을 이야기 하는데, 그중 하나인 팩토리 메소드 패턴(Factory Method Pattern)은 어떤 클래스의 인스턴스를 만들지를 서브 클래스에서 결정하도록 하며 팩토리 메소드를 이용하여 인스턴스를 만드는 일을 서브 클래스한테 시키는 것 이다

하위클래스에서 오브젝트 생성 방법과 클래스를 결정할 수 있도록 미리 정의해둔 메소드를 팩토리 메소드라 하고 이방식을 통해 오브젝트 생성방법을 나머지 로직, 즉 슈퍼클래스의 기본 코드에서 독립시키는 방법을 팩토리 메소드 패턴이라 하는데 이 메소드는 주로 인터페이스 타입으로 오브젝트를 리턴한다.

객체를 생성하기 위한 인터페이스를 만들며 팩토리패턴에서 객체를 생성하는 일을 전담하는 클래스를 Factory라 한다.

자바에서 종종 오브젝트를 생성하는 기능을 가진 메소드를 일반적으로 팩토리 메소드라고 부르기도 하는데 이때 말하는 팩토리 메소드와는 다르다는 것을 알자.

- 객체 생성의 책임을 하위 클래스에 위임시키고 어느 하위 클래스가 위임했는지에 대한 정보를 은닉하고자 하는 경우 

- 객체를 생성하기 위해 인터페이스를 정의하지만 어떤 클래스의 객체를 생성할 지에 대해서는 하위 클래스에서 결정, 클래스 상속을 이용

- Factory Method 패턴에서는 상속을 이용하여 객체 생성을 파생클래스에게 위임하여 실제 생성되는 객체는 파생 클래스가 결정하도록 한다.



아래 예제를 실습하고, 창의적인 예제를 만들어 답변글로 제출 부탁드립니다.

package factory;

//Factory Method 패턴은  생성하고자 하는 객체의 클래스(CarMaker)와 
//이를 생성하는 클래스(CarMakerFactory)의 인터페이스만 공개하여 재사용성을 높입니다.


//factory class
abstract class Factory {
    public final CarMaker create(String name) {
        CarMaker c = createMaker(name);
        return c;
    }
    protected abstract CarMaker createMaker(String name);
}

abstract class CarMaker {
abstract void sell();
}

class Hyundai extends CarMaker {
public String name;
Hyundai(String name) {
this.name = name;
}
void sell() {
System.out.println("현대 ," + name);
}
}

//Factory의 하위클래스에서 객체 생성
class CarMakerFactory extends Factory {
    protected CarMaker createMaker(String name) {
        return new Hyundai(name);
    }
}

public class FactoryMethodTest {
//Main 클래스는 생성하고자 하는 Hyundai를 직접 new로 생성하지 않고,
//CarMakerFactory의 createMaker() 인터페이스를 이용하여 생성합니다.
public static void main(String[] args) {
Factory f = new CarMakerFactory();
CarMaker h = f.createMaker("소나타");
h.sell();
}
}



[결과]
현대 ,소나타






 

Java JVM 기술(자바가상머신) 자바에서 하나의 클래스는 실행의 기본 단위인데 .class 파일을 읽어서 메모리에 적재한 다음 이를 사용시마다 일일이 운영체제가 실행하기에 알맞은 코드로 번역을 했다. 그래서 자바를 Interpreter 언어라고도 한다. 물론 자바는 .class 파일을 만들기 위해 Compile을 해야 하므로 물론 컴파일 언어이다. 자바의 실행속도를 높이기 위해 여러가지 기술이 jvm을 만드는데 이용되었는데 Sun에서 최초로 사용한 기술은JIT이다. 이러한 번역 작업은 자바의 실행 속도를 떨어뜨리는 주 원인 이었다. 그래서 등장한 기술이 JIT(Just-In-Time) 기술이다. 이는 .class 파일을 읽어서 한꺼번에 운영체제에서 인식할 수 있는 코드로 한번에 번역을 하여 한번 번역된 코드는 다음에는 번역을 하지 않으므로 속도를 향상 시킬 수 가 있었다. 물론 앞의 JIT 방법도 문제가 있다. 한꺼번에 번역을 하다 보니 .class 파일의 size가 큰 경우에는 시간이 많이 걸리므로 등장한 기술이 Hotspot 이다. HotSpot 기술은 .class 파일의 모두를 운영체제에 적합한 코드로 바꾸지 않고 가장 실행 시간을 요하는 부분만을 바꾸는 것이다.(실행시간을 많이 소요하는 코드 부분을 HotSport 이라고 한다.) HotSpot 기능이 있는 자바 가상 머신을 HotSpot VM 이라고 하며 옛 방식을 Classic VM이라고 한다. JDK1.4 부터는 Classic VM은 더 이상 사용되지 않으며 HotSpot 가상 머신 만이 포함되어 있다. [출처] 오라클자바커뮤니티 - http://www.oraclejavacommunity.co.kr/bbs/board.php?bo_table=LecJava&wr_id=667

Java JVM 기술(자바가상머신)[자바개발자교육/자바교육/자바강좌/자바,Spring교육잘하는곳/자바,spring교육추천/자바실무교육/JAVA/JAVA교육/JAVA스프링학원/JAVA실무교육]
 
자바에서 하나의 클래스는 실행의 기본 단위인데 .class 파일을 읽어서 메모리에 적재한 다음 이를 사용시마다 일일이 운영체제가 실행하기에 알맞은 코드로 번역을 했다. 그래서 자바를 Interpreter 언어라고도 한다. 물론 자바는 .class 파일을 만들기 위해 Compile을 해야 하므로 물론 컴파일 언어이다.

자바의 실행속도를 높이기 위해 여러가지 기술이 jvm을 만드는데 이용되었는데 Sun에서 최초로 사용한 기술은JIT이다.

이러한 번역 작업은 자바의 실행 속도를 떨어뜨리는 주 원인 이었다. 그래서 등장한 기술이 JIT(Just-In-Time) 기술이다. 이는 .class 파일을 읽어서 한꺼번에 운영체제에서 인식할 수 있는 코드로 한번에 번역을 하여 한번 번역된 코드는 다음에는 번역을 하지 않으므로 속도를 향상 시킬 수 가 있었다.
 
물론 앞의 JIT 방법도 문제가 있다. 한꺼번에 번역을 하다 보니 .class 파일의 size가 큰 경우에는 시간이 많이 걸리므로 등장한 기술이 Hotspot 이다.

HotSpot 기술은 .class 파일의 모두를 운영체제에 적합한 코드로 바꾸지 않고 가장 실행 시간을 요하는 부분만을 바꾸는 것이다.(실행시간을 많이 소요하는 코드 부분을 HotSport 이라고 한다.)
HotSpot 기능이 있는 자바 가상 머신을 HotSpot VM 이라고 하며 옛 방식을 Classic VM이라고 한다. JDK1.4 부터는 Classic VM은 더 이상 사용되지 않으며 HotSpot 가상 머신 만이 포함되어 있다.
 

[자바디자인패턴]템플릿 메소드 패턴(Template Method Pattern),오라클자바커뮤니티JAVA디자인패턴강좌, JAVA교육은 역시 오라클자바커뮤니티 [자바개발자교육/자바교육/자바강좌/자바,Spring교육잘하는곳/자바,spring교육추천/자바실무교육/JAVA/JAVA교육/JAVA스프링학원/JAVA실무교육] [자바디자인패턴]템플릿 메소드 패턴(Template Method Pattern),오라클자바커뮤니티JAVA디자인패턴강좌, JAVA교육은 역시 오라클자바커뮤니티 상위 클래스쪽에 템플릿에 해당하는 메소드가 정의되어 있고,그 메소드의 정의 안에는 추상 메소드가 사용되고 있어 상위 클래스의 프로그램만 보면 추상 메소드를 어떻게 호출 하고 잇는지 알 수 있지만 최종적으로 어떤 처리가 수행되는지는 알 수 없다. 상위클래스의 추상 메소드를 실제로 구현하는 것은 하위 클래스 이다. 하위 클래스 측에서 메소드를 구현하면 구체적인 처리가 결정되고 서로 다른 하위 클래스가 서로 다른 구현을 실행하면 서로 다른 처리가 실행된다. 그러나 어떤 하위 클래스에서 어떤 구현을 하더라도 처리의 뼈대를 결정하고 하위 클래스에서 그 구체적인 내용을 결정하는 디자인 패턴을 Template Method Pattern이라 한다. package factory; //AbstractDisplay.java 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 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 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 TemplateMethodTest { 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(); } } [결과] hello 오라클자바커뮤니티 your name is 오라클자바커뮤니티 your name is 오라클자바커뮤니티 your name is 오라클자바커뮤니티 your name is 오라클자바커뮤니티 your name is 오라클자바커뮤니티 bye~ 오라클자바커뮤니티 +---------------+ |Hello, world~~~| |Hello, world~~~| |Hello, world~~~| |Hello, world~~~| |Hello, world~~~| +---------------+ +----------------+ |안녕하세요~| |안녕하세요~| |안녕하세요~| |안녕하세요~| |안녕하세요~| +----------------+ [출처] 오라클자바커뮤니티 - http://www.oraclejavacommunity.co.kr/bbs/board.php?bo_table=LecJava&wr_id=694 오라클자바커뮤니티교육센터, 개발자전문교육, 개인80%환급 www.oraclejavacommunity.com 평일주간(9:30~18:20) 개강 (6/09)[기업100%환급]SQL기초에서 Schema Object까지 (6/09)[기업100%환급]PL/SQL,ORACLE HINT,TUNING (6/09)[기업100%환급]Spring ,MyBatis,Hibernate실무과정 (6/16)[기업100%환급]안드로이드개발자과정 (6/16)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍 (6/16)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지 (6/23)[교육전취업확정,채용예정자교육]Spring,MyBatis,XPlatform실무프로젝트과정 평일야간(19:00~21:50) 개강 (6/03)안드로이드개발자과정 (6/03)웹퍼블리싱 마스터 (6/09)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지 (6/10)C#4.0, ADO.NET, Network 프로그래밍 (6/10)Spring3.X, MyBatis, Hibernate실무과정 (6/18)C#,ASP.NET마스터 (6/26)SQL초보에서실전전문가까지 주말(10:00~17:50) 개강 (5/31)Spring3.X, MyBatis, Hibernate실무과정 (5/31)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지 (5/31)SQL초보에서실전전문가까지 (5/31)C#,ASP.NET마스터 (6/14)실무예제로 배워보는 jQuery(개발자/디자이너를위한) (6/14)안드로이드개발자과정 주말저녁(18:30~22:20) 개강 (6/21)JAVA,Network&WEB&Framework (6/21)SQL기초에서실무까지

[자바디자인패턴]템플릿 메소드 패턴(Template Method Pattern),오라클자바커뮤니티JAVA디자인패턴강좌, JAVA교육은 역시 오라클자바커뮤니티 [자바개발자교육/자바교육/자바강좌/자바,Spring교육잘하는곳/자바,spring교육추천/자바실무교육/JAVA/JAVA교육/JAVA스프링학원/JAVA실무교육]








[자바디자인패턴]템플릿 메소드 패턴(Template Method Pattern),오라클자바커뮤니티JAVA디자인패턴강좌, JAVA교육은 역시 오라클자바커뮤니티

상위 클래스쪽에 템플릿에 해당하는 메소드가 정의되어 있고,그 메소드의 정의 안에는 추상 메소드가 사용되고 있어 상위 클래스의 프로그램만 보면 추상 메소드를 어떻게 호출 하고 잇는지 알 수 있지만 최종적으로 어떤 처리가 수행되는지는 알 수 없다.

상위클래스의 추상 메소드를 실제로 구현하는 것은 하위 클래스 이다. 하위 클래스 측에서 메소드를 구현하면 구체적인 처리가 결정되고 서로 다른 하위 클래스가 서로 다른 구현을 실행하면 서로 다른 처리가 실행된다. 그러나 어떤 하위 클래스에서 어떤 구현을 하더라도 처리의 뼈대를 결정하고 하위 클래스에서 그 구체적인 내용을 결정하는 디자인 패턴을 Template Method Pattern이라 한다.


package factory;

//AbstractDisplay.java
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
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
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 TemplateMethodTest {
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();
}
}


[결과]

hello 오라클자바커뮤니티
your name is 오라클자바커뮤니티
your name is 오라클자바커뮤니티
your name is 오라클자바커뮤니티
your name is 오라클자바커뮤니티
your name is 오라클자바커뮤니티
bye~ 오라클자바커뮤니티
+---------------+
|Hello, world~~~|
|Hello, world~~~|
|Hello, world~~~|
|Hello, world~~~|
|Hello, world~~~|
+---------------+
+----------------+
|안녕하세요~|
|안녕하세요~|
|안녕하세요~|
|안녕하세요~|
|안녕하세요~|
+----------------+






 

Conditional Insert All 문장은 입력 대상에 [자바개발자교육/자바교육/자바강좌/자바,Spring교육잘하는곳/자바,spring교육추천/자바실무교육/JAVA/JAVA교육/JAVA스프링학원/JAVA실무교육] 대해 조건을 걸어 그 조건에 따라 입력 데이터를 서로 다른 테이블에 나누어 입력하고자 할 때 사용 합니다. [형식] INSERT ALL [WHEN 조건 THEN INTO TABLE_NAME VALUES 값 ] [예] 아래 예는 EMP 테이블의 데이터를 그 사람의 부서코드(10,20,30,40,50)에 따라 서로 다른 테이블에 입력을 하는 아주 간단한 예 입니다. 참고하세요~ select * from emp EMPNO SAL DEPTNO ======================= 7369 800 20 7499 1600 30 7521 1250 30 7566 2975 20 7654 1250 30 7698 2850 30 7782 2450 10 7788 3000 20 7839 5000 10 7844 1500 30 7876 1100 20 7900 950 30 7902 3000 20 7934 1300 10 다음과 같이 연습용 테이블을 만듭니다. create table dept_10 ( empno number, sal number, deptno number ) create table dept_20 ( empno number, sal number, deptno number ) create table dept_30 ( empno number, sal number, deptno number ) create table dept_40 ( empno number, sal number, deptno number ) create table dept_50 ( empno number, sal number, deptno number ) INSERT ALL WHEN deptno = 10 THEN INTO DEPT_10 VALUES (empno, sal, deptno) WHEN deptno = 20 THEN INTO DEPT_20 VALUES (empno, sal, deptno) WHEN deptno = 30 THEN INTO DEPT_30 VALUES (empno, sal, deptno) WHEN deptno = 30 THEN INTO DEPT_40 VALUES (empno, sal, deptno) WHEN deptno = 30 THEN INTO DEPT_50 VALUES (empno, sal, deptno) SELECT empno, sal, deptno FROM emp commit select * from dept_10 EMPNO SAL DEPTNO ======================= 7782 2450 10 7839 5000 10 7934 1300 10 select * from dept_50 EMPNO SAL DEPTNO ======================= 7499 1600 30 7521 1250 30 7654 1250 30 7698 2850 30 7844 1500 30 7900 950 30 [출처] 오라클자바커뮤니티 - http://www.oraclejavacommunity.co.kr/bbs/board.php?bo_table=LecSQLnPlSql&wr_id=113 오라클자바커뮤니티교육센터, 개발자전문교육, 개인80%환급 www.oraclejavacommunity.com 평일주간(9:30~18:20) 개강 (5/30)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지 (5/30)[기업100%환급]SQL기초에서 Schema Object까지 (6/09)[기업100%환급]PL/SQL,ORACLE HINT,TUNING (6/09)[기업100%환급]안드로이드개발자과정 (6/09)[기업100%환급]Spring ,MyBatis,Hibernate실무과정 (6/16)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍 (6/23)[교육전취업확정,채용예정자교육]Spring,MyBatis,XPlatform실무프로젝트과정 평일야간(19:00~21:50) 개강 (5/29)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지 (6/03)안드로이드개발자과정 (6/03)웹퍼블리싱 마스터 (6/10)C#4.0, ADO.NET, Network 프로그래밍 (6/10)Spring3.X, MyBatis, Hibernate실무과정 (6/18)C#,ASP.NET마스터 (6/26)SQL초보에서실전전문가까지 주말(10:00~17:50) 개강 (5/31)Spring3.X, MyBatis, Hibernate실무과정 (5/31)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지 (5/31)SQL초보에서실전전문가까지 (5/31)C#,ASP.NET마스터 (5/31)실무예제로 배워보는 jQuery(개발자/디자이너를위한) (5/31)안드로이드개발자과정 주말저녁(18:30~22:20) 개강 (6/21)JAVA,Network&WEB&Framework (6/21)SQL기초에서실무까지

Conditional Insert All 문장은 입력 대상에 [자바개발자교육/자바교육/자바강좌/자바,Spring교육잘하는곳/자바,spring교육추천/자바실무교육/JAVA/JAVA교육/JAVA스프링학원/JAVA실무교육]


대해 조건을 걸어 그 조건에 따라 입력 데이터를 서로 다른 테이블에 나누어 
입력하고자 할 때 사용 합니다. 

[형식] 
INSERT ALL 
[WHEN  조건 THEN 
  INTO TABLE_NAME VALUES 값 ] 
  

[예] 

아래 예는 EMP 테이블의 데이터를 그 사람의 부서코드(10,20,30,40,50)에 따라 서로 다른 테이블에 입력을 하는 아주 간단한 예 입니다. 

참고하세요~ 

select * from emp 

EMPNO  SAL    DEPTNO 
======================= 
7369        800        20 
7499        1600        30 
7521        1250        30 
7566        2975        20 
7654        1250        30 
7698        2850        30 
7782        2450        10 
7788        3000        20 
7839        5000        10 
7844        1500        30 
7876        1100        20 
7900        950        30 
7902        3000        20 
7934        1300        10 

다음과 같이 연습용 테이블을 만듭니다. 

create table dept_10 ( 
    empno number, 
        sal number, 
        deptno number 


create table dept_20 ( 
    empno number, 
        sal number, 
        deptno number 


create table dept_30 ( 
    empno number, 
        sal number, 
        deptno number 


create table dept_40 ( 
    empno number, 
        sal number, 
        deptno number 


create table dept_50 ( 
    empno number, 
        sal number, 
        deptno number 


INSERT ALL 
  WHEN deptno = 10 THEN 
    INTO DEPT_10 VALUES (empno, sal, deptno) 
  WHEN deptno = 20 THEN 
    INTO DEPT_20 VALUES (empno, sal, deptno) 
  WHEN deptno = 30 THEN 
    INTO DEPT_30 VALUES (empno, sal, deptno) 
  WHEN deptno = 30 THEN 
    INTO DEPT_40 VALUES (empno, sal, deptno) 
  WHEN deptno = 30 THEN 
    INTO DEPT_50 VALUES (empno, sal, deptno) 
SELECT empno, sal, deptno 
FROM  emp 

commit 



select * from dept_10 

EMPNO  SAL    DEPTNO 
======================= 
7782        2450        10 
7839        5000        10 
7934        1300        10 


select * from dept_50 

EMPNO  SAL    DEPTNO 
======================= 
7499        1600        30 
7521        1250        30 
7654        1250        30 
7698        2850        30 
7844        1500        30 
7900        950            30 

2014년 5월 28일 수요일

Set 명령어 [자바개발자교육/자바교육/자바강좌/자바,Spring교육잘하는곳/자바,spring교육추천/자바실무교육/JAVA/JAVA교육/JAVA스프링학원/JAVA실무교육] Set명령은 현재 SQL*Plus의 세션환경을 제어하며 모든 Set 변수 값을 보기 위해서는 Show All명령을 이용하면 된다. 물론 시작 메뉴 à 프로그램 à Oracle-Orahome92 à Application DevelopmentàSQL Plus를 이용하여 실행(GUI 형태로 실행) 하였다면 옵션 à 환경에서 설정 값들을 확인 할 수 있다. 여기서는 모든 SQL*Plus 환경 변수를 살펴 보지 않을 것이며 필요한 몇 가지를 예제를 통해 이해하자. SET AUTO[COMMIT] ON/OFF : 자동으로 DML의 실행 결과를 데이터베이스에 반영 할 지의 여부를 결정, 기본적으로 OFF로 되어 있어 Insert/Update/Delete등의 DML(Data Manupulation Language)을 사용시 Commit이라고 기술 해야 한다. 만약 AutoCommit이 ON으로 되어 있다면 트랜잭션을 취소 하는 RollBack은 불가능 하다. SQL> create table addrbook ( 2 name varchar2(10) not null, 3 addr varchar2(50), 4 tel varchar2(20)); 테이블이 생성되었습니다. SQL> show autocommit autocommit OFF SQL> insert into addrbook values ('홍길동','서울 강남구 역삼동 11', '02-222-3333’); 1 개의 행이 만들어졌습니다. [실습 3-5] 실습 3-5까지 수행했다는 가정 하에 다른 사용자가 SQL*Plus를 scott계정으로 똑 같이 접속을 해서“홍길동”이라는 데이터가 입력 되었는지 확인을 해 보도록 하자. SQL> select * from addrbook; 선택된 레코드가 없습니다. 데이터가 한건도 없는 것은 당연하다. 실습3-5에서 수행한 DML인 Insert문장의 결과가 반영되지 않았기 때문이다. 다른 사용자에서도 “홍길동”이라는 데이터가 보이게 하기 위해서는 Commit을 해 주면 된다. 실습3-5의 마지막 부분에 Commit이라는 명령을 기술하고 다시 별도의 SQL*Plus를 띄운 후scott 계정으로 접속을 하여 결과를 확인 해 보라. 다음과 같이 나타날 것 이다. SQL> select * from addrbook; NAME ADDR ---------- -------------------------------------------------- TEL -------------------- 홍길동 서울 강남구 역삼동 11 02-222-3333 SET PAU[SE] ON/OFF : Query의 결과가 한 화면을 넘어가는 경우 한화면씩 보이게 할 건지의 여부를 결정한다. ON인 경우 Enter Key를 입력하면 결과를 한 화면씩 보인다. SQL> show pause PAUSE는 OFF SQL> select object_name, object_type from user_objects; SQL>-- 결과가 여러 화면을 넘어가므로 마지막 화면만 여러분의 눈에 보일 것이다. SQL>set pause on SQL> select object_name, object_type from user_objects; SQL> -- Enter Key를 입력하여야 한 단계씩 다음으로 진행 된다. [실습 3-6] SET HEA[DING] ON/OFF : 컬럼 명을 나타낼 지의 여부를 결정한다. 기본값은 ON이며 컬럼 명을 나타낸다. SQL> show heading heading ON SQL> set heading off SQL> select ename, sal from emp 2 where ename = 'SMITH'; SMITH [실습 3-7] SET ARRAY[SIZE] ON/OFF : 데이터베이스로부터 한번에 처리 되어 지는 행의 수를 지정 SET ECHO ON/OFF : SQL 파일 등을 실행 시 파일의 SQL 문장을 보일 건지의 여부를 지정 , 기본값은 OFF로서 파일의 SQL 문은 화면에 보이지 않는다. SQL> show echo echo OFF SQL> @test 사원명 급여 ---------- ---------- SMITH 800 SQL> set echo on SQL> @test SQL> select ename as "사원명" , sal as "급여" 2 from emp 3 where ename = 'SMITH' 4 / 사원명 급여 ---------- ---------- SMITH 800 [실습 3-8] SET EDITFILE 파일이름 : edit 명령등으로 현재 버퍼의 내용을 default Editor로 부를때의 기본 이름을 지정. 지정하지 않으면 afiedt.buf로 자동 지정된다. SQL> set editfile firstSQL.sql SQL> edit file firstSQL (이)가 기록되었습니다 1 select ename as "사원명" , sal as "급여" 2 from emp 3* where ename = 'SMITH' [실습 3-9] SET LONG n : 한 컬럼의 데이터 크기가 2G Bytes에 이르는 가변길이 데이터형인 LONG, 4G Bytes까지의 character를 저장 할 수 있는 CLOB, NCLOB등의 데이터가 화면에 표시되는 최대Character수를 지정, 기본값은 80 SQL> create table LongTest ( 2 title varchar2(50) not null, 3 content long); 테이블이 생성되었습니다. SQL> insert into LongTest values ('첫번째 게시물...','반갑습니다... 여러분들 뵙게 되어영광 입니다.'); 1 개의 행이 만들어졌습니다. SQL> commit; 커밋이 완료되었습니다. SQL> select content from LongTest; CONTENT ------------------------------------------------------------------------------- 반갑습니다... 여러분들 뵙게 되어 영광 입니다. SQL> set long 10 SQL> select content from LongTest; CONTENT ---------- 반갑습니다 [실습 3-10] SET TIME ON/OFF : SQL*Plus 프롬프트상에 시각 표시 여부를 지정, 기본적으로 OFF이며 시각은 표시 되지 않는다. SET TIMING ON/OFF : SQL문의 실행 때부터 실행 결과가 응답될 때까지의 시간을 파악하여 출력할 지의 여부를 지정, 기본적으로 OFF이며 응답시각은 표시 되지 않는다. [출처] 오라클자바커뮤니티 - http://www.oraclejavacommunity.co.kr/bbs/board.php?bo_table=LecSQLnPlSql&wr_id=142 오라클자바커뮤니티교육센터, 개발자전문교육, 개인80%환급 www.oraclejavacommunity.com 평일주간(9:30~18:20) 개강 (5/30)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지 (5/30)[기업100%환급]SQL기초에서 Schema Object까지 (6/09)[기업100%환급]PL/SQL,ORACLE HINT,TUNING (6/09)[기업100%환급]안드로이드개발자과정 (6/09)[기업100%환급]Spring ,MyBatis,Hibernate실무과정 (6/16)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍 (6/23)[교육전취업확정,채용예정자교육]Spring,MyBatis,XPlatform실무프로젝트과정 평일야간(19:00~21:50) 개강 (5/29)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지 (6/03)안드로이드개발자과정 (6/03)웹퍼블리싱 마스터 (6/10)C#4.0, ADO.NET, Network 프로그래밍 (6/10)Spring3.X, MyBatis, Hibernate실무과정 (6/18)C#,ASP.NET마스터 (6/26)SQL초보에서실전전문가까지 주말(10:00~17:50) 개강 (5/31)Spring3.X, MyBatis, Hibernate실무과정 (5/31)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지 (5/31)SQL초보에서실전전문가까지 (5/31)C#,ASP.NET마스터 (5/31)실무예제로 배워보는 jQuery(개발자/디자이너를위한) (5/31)안드로이드개발자과정 주말저녁(18:30~22:20) 개강 (6/21)JAVA,Network&WEB&Framework (6/21)SQL기초에서실무까지

Set 명령어 [자바개발자교육/자바교육/자바강좌/자바,Spring교육잘하는곳/자바,spring교육추천/자바실무교육/JAVA/JAVA교육/JAVA스프링학원/JAVA실무교육]
 
 Set명령은 현재 SQL*Plus의 세션환경을 제어하며 모든 Set 변수 값을 보기 위해서는 Show All명령을 이용하면 된다. 물론 시작 메뉴 à 프로그램 à Oracle-Orahome92 à Application DevelopmentàSQL Plus를 이용하여 실행(GUI 형태로 실행) 하였다면 옵션 à 환경에서 설정 값들을 확인 할 수 있다. 여기서는 모든 SQL*Plus 환경 변수를 살펴 보지 않을 것이며 필요한 몇 가지를 예제를 통해 이해하자.
 
SET AUTO[COMMIT] ON/OFF : 자동으로 DML의 실행 결과를 데이터베이스에 반영 할 지의 여부를 결정, 기본적으로 OFF로 되어 있어 Insert/Update/Delete등의 DML(Data Manupulation Language)을 사용시 Commit이라고 기술 해야 한다. 만약 AutoCommit이 ON으로 되어 있다면 트랜잭션을 취소 하는 RollBack은 불가능 하다.
 
SQL> create table addrbook (
  2  name varchar2(10) not null,
  3  addr varchar2(50),
  4  tel varchar2(20));
테이블이 생성되었습니다.
SQL>  show autocommit
autocommit OFF
SQL>  insert into addrbook values ('홍길동','서울 강남구 역삼동 11', '02-222-3333’);
개의 행이 만들어졌습니다.
[실습 3-5]
 
실습 3-5까지 수행했다는 가정 하에 다른 사용자가 SQL*Plus를 scott계정으로 똑 같이 접속을 해서홍길동이라는 데이터가 입력 되었는지 확인을 해 보도록 하자.
SQL> select * from addrbook;
 
선택된 레코드가 없습니다.
 
데이터가 한건도 없는 것은 당연하다. 실습3-5에서 수행한 DML인 Insert문장의 결과가 반영되지 않았기 때문이다. 다른 사용자에서도 홍길동이라는 데이터가 보이게 하기 위해서는 Commit을 해 주면 된다. 실습3-5의 마지막 부분에 Commit이라는 명령을 기술하고 다시 별도의 SQL*Plus를 띄운 후scott 계정으로 접속을 하여 결과를 확인 해 보라. 다음과 같이 나타날 것 이다.
SQL> select * from addrbook;
NAME       ADDR
---------- --------------------------------------------------
TEL
--------------------
홍길동     서울 강남구 역삼동 11
02-222-3333
 
SET PAU[SE] ON/OFF : Query의 결과가 한 화면을 넘어가는 경우 한화면씩 보이게 할 건지의 여부를 결정한다. ON인 경우 Enter Key를 입력하면 결과를 한 화면씩 보인다.
SQL> show pause
PAUSE OFF
SQL> select object_name, object_type from user_objects;
SQL>-- 결과가 여러 화면을 넘어가므로 마지막 화면만 여러분의 눈에 보일 것이다.
SQL>set pause on
SQL> select object_name, object_type from user_objects;
SQL> -- Enter Key 입력하여야  단계씩 다음으로 진행 된다.
[실습 3-6]
 
SET HEA[DING] ON/OFF : 컬럼 명을 나타낼 지의 여부를 결정한다. 기본값은 ON이며 컬럼 명을 나타낸다.
SQL> show heading
heading ON
SQL> set heading off
SQL> select ename, sal from emp
  2  where ename = 'SMITH';
SMITH            
[실습 3-7]
 
SET ARRAY[SIZE] ON/OFF : 데이터베이스로부터 한번에 처리 되어 지는 행의 수를 지정
SET ECHO ON/OFF : SQL 파일 등을 실행 시 파일의 SQL 문장을 보일 건지의 여부를 지정 , 기본값은 OFF로서 파일의 SQL 문은 화면에 보이지 않는다.
SQL> show echo
echo OFF
SQL> @test
사원명           급여
----------         ----------
SMITH           800
SQL> set echo on
SQL> @test
SQL> select ename as "사원명" , sal as "급여"
  2  from emp
  3  where ename = 'SMITH'
  4  /
사원명             급여
----------          ----------
SMITH             800
[실습 3-8]
 
SET EDITFILE 파일이름 : edit 명령등으로 현재 버퍼의 내용을  default Editor로 부를때의 기본 이름을 지정. 지정하지 않으면 afiedt.buf로 자동 지정된다.
SQL> set editfile firstSQL.sql
SQL> edit
file firstSQL () 기록되었습니다
  1  select ename as "사원명" , sal as "급여"
  2  from emp
  3* where ename = 'SMITH'
[실습 3-9]
 
SET LONG n : 한 컬럼의 데이터 크기가 2G Bytes에 이르는 가변길이 데이터형인 LONG, 4G Bytes까지의 character를 저장 할 수 있는 CLOB, NCLOB등의 데이터가 화면에 표시되는 최대Character수를 지정, 기본값은 80
SQL> create table LongTest (
  2  title varchar2(50) not null,
  3  content long);
테이블이 생성되었습니다.
SQL> insert into LongTest values ('첫번째 게시물...','반갑습니다... 여러분들 뵙게 되어영광 입니다.');
개의 행이 만들어졌습니다.
SQL> commit;
커밋이 완료되었습니다.
SQL> select content from LongTest;
CONTENT
-------------------------------------------------------------------------------
반갑습니다... 여러분들 뵙게 되어 영광 입니다.
SQL> set long 10
SQL> select content from LongTest;
CONTENT
----------
반갑습니다
[실습 3-10]
 
SET TIME ON/OFF : SQL*Plus 프롬프트상에 시각 표시 여부를 지정, 기본적으로 OFF이며 시각은 표시 되지 않는다.
SET TIMING ON/OFF : SQL문의 실행 때부터 실행 결과가 응답될 때까지의 시간을 파악하여 출력할 지의 여부를 지정, 기본적으로 OFF이며 응답시각은 표시 되지 않는다.