2013년 2월 25일 월요일

[참고] java 에서 Xml 파일 만드는 예제


참조: http://theeye.pe.kr/entry/Java-DOM%ED%8C%8C%EC%84%9C%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-XML-%ED%8C%8C%EC%9D%BC-%EC%83%9D%EC%84%B1%ED%95%98%EA%B8%B0

Java에는 다양한 XML 파서를 이용할 수 있습니다. 그중에 DOM이 가장 직관적이고 쉬운 방법으로 XML을 처리할 수 있지 않을까 생각됩니다. DOM을 이용하여 XML을 생성하기 위해서는 기본적으로 모든 XML의 내용을 정의할 수 있는 Document를 생성해야 하는데요 이것을 생성하기 위해 DocumentBuilder 클래스를 사용합니다.

마지막으로 만들어진 XML 엘리먼트 노드들이 연결된 Document를 가지고 XML 파일을 생성하는데 이때에 Transformer 클래스를 사용합니다.

DOM Parser 결과물

이 예제를 수행하게 되면 다음의 같은 내용을 가진 file.xml 파일이 생성됩니다.
<?xml version="1.0" encoding="UTF-8" standalone="no" ?> <company>
        <staff id="1">
                <firstname>Gildong</firstname>
                <lastname>Hong</lastname>
                <nickname>Mr.Hong</nickname>
                <salary>100000</salary>
        </staff>
</company>

Java 클래스 소스

try
{
        DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
        // 루트 엘리먼트
        Document doc = docBuilder.newDocument();
        Element rootElement = doc.createElement("company");
        doc.appendChild(rootElement);
        // staff 엘리먼트
        Element staff = doc.createElement("Staff");
        rootElement.appendChild(staff);
        // 속성값 정의
        Attr attr = doc.createAttribute("id");
        attr.setValue("1");
        staff.setAttributeNode(attr);
        // 속성값을 정의하는 더 쉬운 방법
        // staff.setAttribute("id", "1");
        // firstname 엘리먼트
        Element firstname = doc.createElement("firstname");
        firstname.appendChild(doc.createTextNode("Gildong"));
        staff.appendChild(firstname);
        // lastname 엘리먼트
        Element lastname = doc.createElement("lastname");
        lastname.appendChild(doc.createTextNode("Hong"));
        staff.appendChild(lastname);
        // nickname 엘리먼트
        Element nickname = doc.createElement("nickname");
        nickname.appendChild(doc.createTextNode("Mr.Hong"));
        staff.appendChild(nickname);
        // salary 엘리먼트
        Element salary = doc.createElement("salary");
        salary.appendChild(doc.createTextNode("100000"));
        staff.appendChild(salary);
        // XML 파일로 쓰기
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
        transformer.setOutputProperty(OutputKeys.INDENT, "yes");        DOMSource source = new DOMSource(doc);
        StreamResult result = new StreamResult(new FileOutputStream(new File("C:\\file.xml")));
        // 파일로 쓰지 않고 콘솔에 찍어보고 싶을 경우 다음을 사용 (디버깅용)
        // StreamResult result = new StreamResult(System.out);
        transformer.transform(source, result);
        System.out.println("File saved!");
}
catch (ParserConfigurationException pce)
{
        pce.printStackTrace();
}
catch (TransformerException tfe)
{
        tfe.printStackTrace();
}

2013년 2월 21일 목요일

[참고] 오라클 jdbc tnsname 설정 관련


- 업무 파티션을 하고자 할 경우 각 업무별로 장애가 발생하지 않는 평시에
  RACDB1으로 접속하여 사용할 것인지 RACDB2로 접속하여 사용할 것인지를 결정하여야 함.
- 업무파티션의 기준은 각각의 노드에서 테이블 단위의 DML(INSERT,UPDATE,DELETE)이
  최소화되도록 설계하여야 함.

1. 리스너 설정(listener.ora)
   -----------------------
   # Local Listener를 사용하도록 설정
   LISTENER_HOSTNAME =
     (DESCRIPTION_LIST =
       (DESCRIPTION =
         (ADDRESS = (PROTOCOL = TCP)(HOST = VIP_HOSTNAME)(PORT = 1521)(IP=FIRST))
         (ADDRESS = (PROTOCOL = TCP)(HOST = HOSTNAME)    (PORT = 1521)(IP=FIRST))
         (ADDRESS = (PROTOCOL = IPC)(KEY = extproc))
       )
     )
   
   SID_LIST_LISTENER_HOSTNAME =
     (SID_LIST =
       (SID_DESC =
         (SID_NAME = PLSExtProc)
         (ORACLE_HOME = /oracle/app/oracle/product/10.2.0/db_1)
         (PROGRAM = extproc)
       )
     )

2. TNS(tnsnames.ora) 설정 필요 - JDBC OCI 방식
   ----------------------------------------------
    # JDBC OCI 방식으로 설정하여 사용하고자 할 경우 TNS설정이 필요하며
    # RACDB에 접속하는 방식은 SQL*Net을 사용하게 됨
    # (SELECT인 것만 FAILOVER할 수 있도록 설정한 예, 주로 많이 사용하는 설정)
   TNS_RACDB1 = (DESCRIPTION=
                 (LOAD_BALANCE=OFF)
                 (FAILOVER=ON)
                 (ADDRESS=(PROTOCOL=TCP)(HOST=VIP_HOSTNAME1)(PORT=1521))
                 (ADDRESS=(PROTOCOL=TCP)(HOST=VIP_HOSTNAME2)(PORT=1521))
                 (CONNECT_DATA = (SERVER = DEDICATED)
                                 (SERVICE_NAME = RACDB)
                                 (FAILOVER_MODE=(TYPE=SELECT)(METHOD=BASIC))
                 )
             )
   
   TNS_RACDB2 = (DESCRIPTION=
                 (LOAD_BALANCE=OFF)
                 (FAILOVER=ON)
                 (ADDRESS=(PROTOCOL=TCP)(HOST=VIP_HOSTNAME2)(PORT=1521))
                 (ADDRESS=(PROTOCOL=TCP)(HOST=VIP_HOSTNAME1)(PORT=1521))
                 (CONNECT_DATA = (SERVER = DEDICATED)
                                 (SERVICE_NAME = RACDB)
                                 (FAILOVER_MODE=(TYPE=SELECT)(METHOD=BASIC))
                 )
             )

     1]  RACDB1에 접속하고자 하는 설정
          jdbc:oracle:oci:@TNS_RACDB1

     2  RACDB2 접속하고자 하는 설정
          jdbc:oracle:oci:@TNS_RACDB2

3. TNS(tnsnames.ora) 설정 필요없음 - JDBC thin 방식
   -----------------------------------------------
   1] RACDB1에 접속하고자 하는 설정
      jdbc:oracle:thin:@(DESCRIPTION=
                           (FAIL_OVER=ON)
                           (LOAD_BALANCE=OFF)
                           (ADDRESS=(PROTOCOL=TCP)(HOST=100.100.52.111)
                                    (PORT=1521)) # RACDB1 Virtual-IP 사용
                           (ADDRESS=(PROTOCOL=TCP)(HOST=100.100.52.112)
                                    (PORT=1521)) # RACDB2 Virtual-IP 사용
                           (CONNECT_DATA=(SERVICE_NAME=RACDB)))

   2] RACDB2에 접속하고자 하는 설정
      jdbc:oracle:thin:@(DESCRIPTION=
                           (FAIL_OVER=ON)
                           (LOAD_BALANCE=OFF)
                           (ADDRESS=(PROTOCOL=TCP)(HOST=100.100.52.112)
                                    (PORT=1521)) # RACDB2 Virtual-IP 사용
                           (ADDRESS=(PROTOCOL=TCP)(HOST=100.100.52.111)
                                    (PORT=1521)) # RACDB1 Virtual-IP 사용
                           (CONNECT_DATA=(SERVICE_NAME=RACDB)))

2013년 2월 17일 일요일

java replace 실행시 주의사항들


펌글: http://mean79.tistory.com/60

1. []으로 싸주면 문자자체로 인식하는 것들.

*  ⇒ [*]
+  ⇒ [+]
$  ⇒ [$]
|  ⇒ [|]              "너 때문에 집에를 못갔다 ㅡㅜ "


2. \\를 붙여줘야 하는 것들.

( ⇒ \\(
) ⇒ \\)
{ ⇒ \\{
} ⇒ \\}
^ ⇒ \\^
[ ⇒ \\[
] ⇒ \\]


3. 자바의 특수문자는 \을 쓴다.

 " ⇒ \"


4. 나머지 부호들은 괜찮은 듯 하다.

확인된 것.

! # % & @ ` : ; - . < > , ~ '



ex ) 위에 놈들 다 지워 보자.

    String c = "!\"#$%&(){}@`*:+;-.<>,^~|'[]";
    c = c.replaceAll("!\"#[$]%&\\(\\)\\{\\}@`[*]:[+];-.<>,\\^~|'\\[\\]", "");




 public static String getSTRFilter(String str){
  int str_length = str.length();
  String strlistchar   = "";
  String str_imsi   = "";
  String []filter_word = {"","\\.","\\?","\\/">\\~","\\!","\\@","\\#","\\$","\\%","\\^","\\&","\\*","\\(","\\)","\\_","\\+","\\=","\\|","\\\\","\\}","\\]","\\{","\\[","\\\"","\\'","\\:","\\;","\\<","\\,","\\>","\\.","\\?","\\/"};

  for(int i=0;i<filter_word.length;i++){
   //while(str.indexOf(filter_word[i]) >= 0){
      str_imsi = str.replaceAll(filter_word[i],"");
      str = str_imsi;
   //}
  }

  return str;

 }


아님 replace가 안 먹을때는 이런방법도..^^
import java.util.StringTokenizer;

public class WebUtil
{
           // 문자열 변환  String a= "abc" => replace(a, "c") => a : ab
           public String strReplace(String s1, String s2){
                      String res = "";
                      StringTokenizer str = new StringTokenizer(s1, s2);


                       while(str.hasMoreTokens()){
                                     res += str.nextToken();  
                               System.out.println(res);
                       }
               return res;
           }
}

- naver

WIndows 특정포트 닫기


펌글: http://ps000.tistory.com/28

 네트워크 기반 프로그램을 짜다보면 특정 포트를 사용하게 되는데 이 때 실행중인 프로그램을 종료해도 포트가 아직 살아있는 경우가 있습니다.
 리눅스에서는 간단하게 프로세스를 죽이면 되는데 윈도우에서는 어떻게 해야할지 몰라서 많이 당황하는데 오늘 그 해결책을 알려드리겠습니다.

먼저 리눅스와 같이 특정 포트에서 실행중인 프로세스를 찾아야 합니다.
 시작 -> 실행 -> cmd 혹은 윈도우키(?)+R -> cmd 를 입력하여 커맨드 창을 띄웁니다.
 현재 자신이 사용하고자 하는 포트가 열려있는지 검색하기 위해 명령어를 입력해봅니다.


netstat -a -o

위의 명령어를 입력하면 열려있는 포트는 물론 해당 PID까지 보입니다.
 그럼 리눅스에서와 마찬가지로 PID를 죽이면 되는 것입니다.
 명령어는 다음과 같습니다.

taskkill /f /pid (PID번호)

2013년 2월 7일 목요일

오라클 Jdbc 설정방법



참조:http://blog.naver.com/kkson50?Redirect=Log&logNo=120157753363
데이타베이스별로 JDBC DriverName을 설정하는 방법 모음입니다.

I need information of oracle.
Driver name is "oracle.jdbc.driver.OracleDriver"  do not change anyword.
Uri is "jdbc:oracle:thin:@//127.0.0.1:1521/dbname" you must chang IP and dbname.

add  java oracle connection tip:

another Uri = "jdbc:oracle:thin:@(DESCRIPTION="
+"(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1) (PORT=1521)) )"
+"(CONNECT_DATA=(SERVICE_NAME=dbname)))";

DatabaseDriver NameSample URLNotes
DB2com.ibm.db2.jcc.DB2Driverjdbc:db2://127.0.0.1:50000/dbname
Derbyorg.apache.derby.jdbc.ClientDriverjdbc:derby://127.0.0.1/testdbclient/server
org.apache.derby.jdbc.EmbeddedDriverjdbc:derby:path-to-hsql-db-files;create=trueembedded
FrontBasejdbc.FrontBase.FBJDriverjdbc:FrontBase://127.0.0.1/dbname
HSQLDBorg.hsqldb.jdbcDriverjdbc:hsqldb:hsql://127.0.0.1client/server
jdbc:hsqldb: file:/path-to-hsql-db-filesembedded
H2org.h2.Driverjdbc:h2:mem:myTestMem;MVCC=TRUEembedded in-memory
Ingrescom.ingres.jdbc.IngresDriverjdbc:ingres://127.0.0.1:II7/dbname
MySQLcom.mysql.jdbc.Driverjdbc:mysql://127.0.0.1/dbname
OpenBasecom.openbase.jdbc.ObDriverjdbc:openbase://127.0.0.1/dbname
Oracle (10i, 9i, 8i, 8)oracle.jdbc.driver.OracleDriverjdbc:oracle:thin:@//127.0.0.1:1521/dbname
PostgreSQL (7.4, 8.*)org.postgresql.Driverjdbc:postgresql://127.0.0.1:5432/dbname
SQLite 3.*org.sqlite.JDBCjdbc:sqlite:path_to_dbfiledriver fromzentus.com
SQLServercom.microsoft.sqlserver.jdbc.SQLServerDriverjdbc:sqlserver://127.0.0.1;databaseName=dbnameMicrosoft Driver
com.microsoft.jdbc.sqlserver.SQLServerDriverjdbc:microsoft:sqlserver://127.0.0.1;databaseName=dbname;SelectMethod=cursorMicrosoft Driver, SQL Server prior to 2005
net.sourceforge.jtds.jdbc.Driverjdbc:jtds:sqlserver://127.0.0.1:5000/dbnamejTDS Driver
Sybasecom.sybase.jdbc3.jdbc.SybDriverjdbc:sybase:Tds:127.0.0.1:5000/dbnameSybase driver
net.sourceforge.jtds.jdbc.Driverjdbc:jtds:sybase://127.0.0.1:5000/dbname;useLOBs=false;TDS=4.2