내 툴의 구성은

1.Db커넥션 정보 입력

2.Db 사용 쿼리 선택

 

을 입력받아서 1의 정보 문자열 , 2의 선택정보를 static 쿼리 문자열 테이블에서 꺼내와서 두개를 txt나 xml로

만들어 주는 것이었다.

 

문제점이

a.DbConfigInfo 클래스는  b.DbConnectionInfo클래스 , c.DbQueryInfo클래스를 포함 시키는 Composition 관계로서

 

내 경우에 b,c의 멤버 필드로 String[] 와 enum InfoIndex{DBCON_DRIVER,DBCON_URL,DBCON_LOGIN_ID,...}

처럼 구성했었다. (추후에 조금 더 발전 시킨게.. ArrayList<String> 이엇음;;;)

 

map 자료구조를 나는 까먹었던 것이다!!!! bean 코드를 보면서 property(name , value) 를 그토록 봤었고.. 게다가

예전에 System.property를 전부 출력해봤는데.. 나는 property 데이터 타입의 유용성및 확장성에 대해 깊이있게

생각을 안했었다. (데이터와 코드를 분리한다!, 추가 기능의 탑재를 손쉽게 한다!)

 

유용한 데이터 타입을 팽개치고 string[] 과 인덱스 테이블을 사용하려하고 그땜에 기술적인 문제로 고민하다니;;

 

 

현재 property , xml에 관해서 정보를 찾아보다 spring 프레임 워크에서 저렇게 외부 데이터를 사용한다는

사실을 뒤늦게 깨닫고.. 조금 더 파고 들다가

 

java.sql.DriverManager

java.sql.Driver

java.sql.PreparedStatement (jsp 교재에서 접근하게된 데이터 타입으로 sql 쿼리 수행과 결과 얻기를 상당히 편하게 해준다)

java.util.properties

java.util.ServiceLoader를 파고 들게 되었다.

 

java.net 패키지도 훑어볼것!! (java.net.URL 클래스의 역할과 의미)

 

private static ServiceLoader<CodecSet> codecSetLoader = ServeiceLoader.load(CodecSet.class)

 

CodecSet.class 어디서 많이 본 문법(reflection) 아닌가? 내가 정의한 서비스(클래스묶음)를 저장해뒀다가 불러오는것

아닌가.. 조금 더 파야할듯 한다.  

 

추가로 annotation 또한 빨리 익혀야한다.

 

http://blog.naver.com/dalbong97?Redirect=Log&logNo=130164171144

 

 

********************************************

property의 경운 string string 으로 key, value를 저장하는 형식이고

map의 경운 string Object(모든 클래스 정보) 식으로 key, value를 저장하는 느낌같다. 아직 명확친 않다.

(빈객체를 xml을 이용해 세팅및 생성한다라..)

 

http://blog.naver.com/agapeuni?Redirect=Log&logNo=60090465973 완전히 이해할것!!!!!!!

 

java.net.URL 클래스의 유용성

http://cafe.daum.net/fordeveloper2/DMsp/59?q=java.net.URL&re=1

 

(ex)

 

---------------  
예제1  
---------------  
import java.io.*;  
import java.net.*;  

class URLInfoTest{  
public static void main(String[] args) throws Exception {  
try{  
//URL aURL = new URL("http://www.oraclejava.co.kr");  
URL aURL = new URL("http", "www.oraclejava.co.kr", 80 , "/index.jsp");  
System.out.println("protocol name:" + aURL.getProtocol());  
System.out.println("host name:" + aURL.getHost());  
System.out.println("file name:" + aURL.getFile());  
//생성자에서 port가 set되는 경우에 표시, 아니면 -1  
System.out.println("port name:" + aURL.getPort());  
//HTML 문서 내부의 위치를 지정하는 <a name="..."> 태그의 값을 구한다.  
System.out.println("ref : "+aURL.getRef());  
BufferedReader br  = new BufferedReader(new InputStreamReader(aURL.openStream()));  <- 주목할것!

 

/*

고민을 해보자. 어째서 BufferedReader가 생성자의 매개변수로 InputStreamReader를 받을 수 있는지를!

BufferedReader, InputStreamReader는 java.io.Reader 의 파생 클래스이다.

 

BufferedReader, InputStreamReader 둘다 java.io.Reader 타입의 in 이란 멤버 필드를 갖고 있다. 생성자에서 받게 되는

매개변수의 타입이 java.io.Reader 타입이다.

 

그럼으로 다형성을 이용해 Reader형 필드에 InputStreamReader를 보관할 수 있다. 인터페이스 메서드 read,fill 등에선

실제론 in.read() , in.fill() 등으로 연산을 한다.

 

다른 객체의 메서드를 상속 계층 트리의 다형성을 이용해 내가 사용해서 내 연산을 확장한다!  이것이 데코레이터 패턴이다.

 

URL 객체의 설계역시.. 입,출력 작업을 지원하기 위해 openStream이란 인터페이스를 제공한다. 이것을 자바io의 인풋 스트림 객체가 받고, 또 이것을 입출력 효율을 위해 버퍼드 리더 객체가 받는다..  얼마나 멋진가?

 URL 클래스의 openStream() 메서드이다.

public final InputStream openStream() throws java.io.IOException 
{
<div class="line" style="font:/normal 'Lucida Grande', Tahoma, Verdana, Arial, Helvetica, sans-serif; color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; padding-left: 10px; margin-top: -2px; word-spacing: 0px; white-space: normal; background-color: rgb(255, 255, 255); -webkit-text-stroke-width: 0px;">}</div><p> </p><div class="line" style="font:/normal 'Lucida Grande', Tahoma, Verdana, Arial, Helvetica, sans-serif; color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; padding-left: 10px; margin-top: -2px; word-spacing: 0px; white-space: normal; background-color: rgb(255, 255, 255); -webkit-text-stroke-width: 0px;"><pre style="margin: 0px; display: inline;">public URLConnection openConnection() throws java.io.IOException </pre></div><div class="line" style="font:/normal 'Lucida Grande', Tahoma, Verdana, Arial, Helvetica, sans-serif; color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; padding-left: 10px; margin-top: -2px; word-spacing: 0px; white-space: normal; background-color: rgb(255, 255, 255); -webkit-text-stroke-width: 0px;"><pre style="margin: 0px; display: inline;">{</pre></div><div class="line" id="line-969" style="font:/normal 'Lucida Grande', Tahoma, Verdana, Arial, Helvetica, sans-serif; color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; padding-left: 10px; margin-top: -2px; word-spacing: 0px; white-space: normal; background-color: rgb(255, 255, 255); -webkit-text-stroke-width: 0px;"><div class="lnml" id="lnml-969" style="display: inline;"></div><div class="lnmr" id="lnmr-969" style="display: inline;"></div><pre style="margin: 0px; display: inline;"> return .openConnection(this);</pre><div class="lnml" id="lnml-970" style="display: inline;"></div><div class="lnmr" id="lnmr-970" style="display: inline;"></div><pre style="margin: 0px; display: inline;">    </pre></div><div class="line" style="font:/normal 'Lucida Grande', Tahoma, Verdana, Arial, Helvetica, sans-serif; color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; padding-left: 10px; margin-top: -2px; word-spacing: 0px; white-space: normal; background-color: rgb(255, 255, 255); -webkit-text-stroke-width: 0px;"><pre style="margin: 0px; display: inline;"> }</pre></div><div class="line" style="font:/normal 'Lucida Grande', Tahoma, Verdana, Arial, Helvetica, sans-serif; color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; padding-left: 10px; margin-top: -2px; word-spacing: 0px; white-space: normal; background-color: rgb(255, 255, 255); -webkit-text-stroke-width: 0px;"> </div><div class="line" style="font:/normal 'Lucida Grande', Tahoma, Verdana, Arial, Helvetica, sans-serif; color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; padding-left: 10px; margin-top: -2px; word-spacing: 0px; white-space: normal; background-color: rgb(255, 255, 255); -webkit-text-stroke-width: 0px;">URL 클래스의 멤버 필드</div><div class="line" style="font:/normal 'Lucida Grande', Tahoma, Verdana, Arial, Helvetica, sans-serif; color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; padding-left: 10px; margin-top: -2px; word-spacing: 0px; white-space: normal; background-color: rgb(255, 255, 255); -webkit-text-stroke-width: 0px;">transient URLStreamHandler handler;</div><div class="line" style="font:/normal 'Lucida Grande', Tahoma, Verdana, Arial, Helvetica, sans-serif; color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; padding-left: 10px; margin-top: -2px; word-spacing: 0px; white-space: normal; background-color: rgb(255, 255, 255); -webkit-text-stroke-width: 0px;"> </div><div class="line" style="font:/normal 'Lucida Grande', Tahoma, Verdana, Arial, Helvetica, sans-serif; color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; padding-left: 10px; margin-top: -2px; word-spacing: 0px; white-space: normal; background-color: rgb(255, 255, 255); -webkit-text-stroke-width: 0px;">아래는 URLStreamHandler 클래스가 사용하는 타 패키지의 클래스</div><div class="line" style="font:/normal 'Lucida Grande', Tahoma, Verdana, Arial, Helvetica, sans-serif; color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; padding-left: 10px; margin-top: -2px; word-spacing: 0px; white-space: normal; background-color: rgb(255, 255, 255); -webkit-text-stroke-width: 0px;">(In/Out Stream을 주목!)</div><div class="line" style="font:/normal 'Lucida Grande', Tahoma, Verdana, Arial, Helvetica, sans-serif; color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; padding-left: 10px; margin-top: -2px; word-spacing: 0px; white-space: normal; background-color: rgb(255, 255, 255); -webkit-text-stroke-width: 0px;">
 package java.net;
 
 import java.io.File;
 
 public abstract class URLStreamHandler 

</div>

*/


String line;  
while((line = br.readLine()) != null) {  
System.out.println(line);  
}  
}  
catch(MalformedURLException e) {  
System.out.println("MalformedURLException : "+e);  
}  
catch(IOException e) {  
System.out.println("IOException :"+ e);  
}  
}  
}  



-----------------  
예제2  
-----------------  
import java.io.*;  
import java.net.*;  

class URLInfoTest2{  
public static void main(String[] args) throws Exception {  
try{  
int ch;  
URL aURL = new URL("http", "www.oraclejava.co.kr", 80 , "/test.html");  
Class[] classes = {Reader.class, InputStream.class};  
Object content = aURL.getContent(classes);  
System.out.println(content + "\n");  
while((ch=((InputStream)content).read()) != -1) {  
               System.out.print((char) ch);  
            }  
System.out.println("--------------------------------");  
InputStream is = aURL.openStream();              
            while((ch=is.read()) != -1) {  
               System.out.print((char) ch);  
            }  
}  
catch(MalformedURLException e) {  
System.out.println("MalformedURLException : "+e);  
}  
catch(IOException e) {  
System.out.println("IOException :"+ e);  
}  
}  
}  


--------------------  
예제3  
--------------------  
import java.io.*;  
import java.net.*;  
public class PageReadTest{  
  public static void main(String[] args) throws Exception   {  
      if(args.length<1)  
        System.out.println("usage: java PageReadTest http://www.oraclejava.co.kr");  
    URL location = new URL(args[0].toString());  
      BufferedReader in = new BufferedReader  
       (new InputStreamReader(location.openStream()));  
String readLine;  
       while ((readLine = in.readLine()) != null)  
    System.out.println(readLine);  
     in.close();  
  }  
}  

by givingsheart 2014. 1. 1. 15:41