2017년 4월 26일 수요일

[Java]날짜 변환 기본

[날짜 계산을 위한 변환]
String edate = "2016-12-01";

int year = Integer.valueOf(edate.substring(0, 4));
int month = Integer.valueOf(edate.substring(5, 7));
int day = Integer.valueOf(edate.substring(8, 10));

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
c.set(year, month-1, day-1);
String date = sdf.format(c.getTime());


[단순 변환]
String edate = "2016-12-01";

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date ndate = sdf.parse(edate);
Calendar c = Calendar.getInstance();
c.setTime(ndate);
String date = sdf.format(c.getTime());

2017년 4월 20일 목요일

[SQL]데이터 불러올 때 한글 깨짐



EX)
SELECT CONCAT(CAST(COUNT(B.ENAME) AS CHAR),'개') AS '$amount_count'
FROM KSP200_DATA A," + "KSP200S_DATA B

Count는 int형 '개'는 Char형으로 숫자+문자열일 시 한글이 깨짐.
그래서  COUNT(B.ENAME를 char형으로 캐스트하여 불러와야 함.

2017년 4월 13일 목요일

[SQL] 커넥션풀 옵션

※ 커넥션 풀의 속성

  • maxActive  : 커넥션 풀이 제공할 최대 커넥션 갯수
  • whenExhaustedAction 커넥션 풀에서 가져올 수 있는 커넥션이 없을 때 어떻게 동작할지를 지정.
    0일 경우 에러 발생.
    1일 경우 maxWait 속성에서 지정한 시간만큼 커넥션을 구할때까지 기다림.
    2일 경우 일시적으로 커넥션을 생성해서 사용
  • maxWait whenExhaustedAction 속성의 값이 1일 때 사용되는 대기 시간.
    단위는 1/1000초, 0보다 작을 경우 무한히 대기
  • maxIdle  사용되지 않고 풀에 저장될 수 있는 최대 커넥션 갯수.
    음수일 경우 제한이 없음
  • minIdle 사용되지 않고 풀에 저장될 수 있는 최소 커넥션 갯수.
  • testOnBorrow : true일 경우 커넥션 풀에서 커넥션을 가져올 때 커넥션이 유효한지의 여부를 검사
  • testOnReturn : true일 경우 커넥션 풀에 커넥션을 반환할 때 커넥션이 유효한지의 여부를 검사 
  • timeBetweenEvctionRunsMillis사용되지 않는 커넥션을 추출하는 쓰레드의 실행 주기 지정.
    양수가 아닐 경우 실행되지 않는다.
    시간 단위는 1/1000초.
  • testWhileIdle true일 경우 비활성화 커넥션을 추출할 때 커넥션이 유효한지의 여부를 검사해서 유효하지 않은 커넥션은 풀에서 제거.



커넥션 풀 API 참조 : http://commons.apache.org/proper/commons-dbcp/apidocs/index.html


[ Java 예제 ]

package com.dataSource.dbcp;
import java.beans.PropertyVetoException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import org.apache.commons.dbcp.BasicDataSource;

public class DataSource {

     private static DataSource     datasource;
     private BasicDataSource ds;

     private DataSource() throws IOException, SQLException, PropertyVetoException {

         ds = new BasicDataSource();
         ds.setDriverClassName("com.mysql.jdbc.Driver");
         ds.setUsername("root");
         ds.setPassword("root");
         ds.setUrl("jdbc:mysql://localhost/test");
       
      // the settings below are optional -- dbcp can work with defaults
         ds.setMinIdle(5);
         ds.setMaxIdle(20);
         ds.setMaxOpenPreparedStatements(180);
     }

     public static DataSource getInstance() throws IOException, SQLException, PropertyVetoException {

         if (datasource == null) {
             datasource = new DataSource();
             return datasource;
         } else {
             return datasource;
         }

     }

     public Connection getConnection() throws SQLException {
         return this.ds.getConnection();
     }

 }

2017년 4월 4일 화요일

[JAVA]Thread Option

yield : 현재 실행중인 스레드 객체를 일시적으로 중단
sleep : 현재 실행중인 스레드를 지정된 밀리초 + 지정된 나노초 동안 수면 상태(일시적 실행 중단)로 변경
stop :스레드가 실행을 중단하도록 강제 실행
interrupt : 스레드를 인터럽트
interrupted : 현재 스레드를 인터럽트했는지 여부를 테스트
destroy : 종결 처리하지 않고, 스레드를 버림
isAlive : 스레드가 활동중인지 여부를 테스트 (해당 스레드가 활동중인 경우 true, 그렇지 않으면 false)
suspend : 스레드를 일시 중단
resume : 중단된 스레드를 재개
setPriority : 스레드의 우선순위를 변경
getPriority : 스레드의 우선순위를 리턴
getName : 스레드의 이름을 리턴
activeCount : 스레드 그룹에 있는 활성 스레드의 현재 수를 리턴
enumerate : 스레드 그룹 및 하위 그룹에 있는 모든 활성 스레드를 지정된 배열로 복사
countStackFrames : 스레드에 있는 스택 프레임의 수를 계산
join : 스레드가 종료되는 것을 적어도 millis 밀리초 동안 기다림립. 시간 종료 값이 0이면 무한히 기다림
toString : 스레드 이름, 우선순위 및 스레드 그룹을 포함하여, 스레드의 문자열 표시를 리턴

package test;

import java.text.SimpleDateFormat;
import java.util.Date;

class News extends Thread{
String news;
public News(String n){
this.news = n;
}
public void run(){
for(int i=0; i<3000000;i++){
System.out.println("Message "+news+" "+i);
}
}
}
class tt{
public static String time() {
Date dt = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd, hh:mm:ss:SSS a");
return sdf.format(dt).toString();
}
}
class Synchronized_Sample {

public static void main(String[] args) {
News n1 = new News("Eng");
News n2 = new News("Kor");
News n3 = new News("Mat");

try{
String st = tt.time();

n1.start();n1.join();
n2.start();n2.join();
n3.start();
n3.join();
String en = tt.time();

System.out.println("start:"+st+" // "+"end:"+en);
}catch(InterruptedException e){
e.printStackTrace();
}

}
}쓰레드 예시.


쓰레드풀 가이드라인 http://palpit.tistory.com/732



2017년 3월 22일 수요일

[Java]Thread 기초문법

1)쓰레드 생성방법

a)
Extends Thread  //쓰레드 클래스상속
public void run() //오버라이딩
b)
implements Runnable
public void run()

2)쓰레드 클래스함수
start()  //run start
join()   //wait for this thread for to die.
getPriority()  //쓰레드 우선순위 얻어옴
setPriority()  //쓰레드 우선순위 설정

3)동기화
한 쓰레드가 접근하는 인스턴스, 변수에 다른 쓰레드가 접근하지 못하게 하여야 한다.

방법1) 인스턴스 전체 동기화.   - 모든 인스턴스는 하나의 열쇠를 지니고 있다.
public synchronized void function(){
  cnt++;
 }

방법2)동기화 블록으로 필요부분만
public void function() {
  synchronized(this){   //this는 어떤 위치의 열쇠를 가져다 쓸것인지를 묻는다.
   cnt++;
  }
}

2017년 3월 7일 화요일

[English]Day 12

enthusiastic 열렬한
punctual 시간을 지키는

snobby 콧대 높은 척 하는
She's so snobby that she won't talk to anyone who isn't well dressed.

triumph 승리, 성공
Jerry was an individual who turned tragedy into triumph.
제리는 비극을 성공으로 바꿨던 인물이다.

dehydrate 탈수하다
Drink more water to prevent you from getting dehydrated.
탈수 되는 것을 방지하기 위해 물을 더 마셔라.

I trust it will be well worth the trip.
저는 그 곳이 여행할만한 충분한 가치가 있다고 생각해요.

You have come a long way to see me. 저를 만나러 먼 길을 오셨네요.

I am scheduled to see mr.kim at 3:45 네 3시 45분에 윌리엄씨와 만나기로 되어있어요.

I'll let him know you have arrived. 도착했다고 전해드릴께요.

How long will the flight take to USA. 미국까지 비행시간은 얼마나 됩니까?

A good example that comes to mind is 000 생각나는 좋은 예는 000입니다.

I'm particularly proud of 000 특히 000이 자랑스러워요.

Time keeping is important to me. 시간엄수는 나에게 중요하다.

As long as you say the right things, you'll be fine. 네가 옳은 말을 한다면 넌 괜찮을 거야.


2017년 3월 6일 월요일

[Java] Collection Framework


1)List <E>

-method
 add(instance)
 get(index)
 remove(index)
 ensureCapacity(500) //리스트의 크기를 정해준다
 size()

-ArrayList<E>
 자동으로 인덱스에 따라 배열의 크기를 늘려주지만, 추가/삭제 연산 시간이 많이 소요된다.

-LinkedList<E>
 추가/삭제 연산이 간단하지만 데이터 참조가 다소 불편하다.


2)Iterator<E> 를 이용한 순차적 접근

Collection<E>인터페이스에는 Iterator<E> iterator() 메소드가 정의되어있다.
여기에 정의되어 있는 메소드는
  boolean hasNext()    //참조할 다음 번 요소가 존재하면 true
  E next()                  //다음 요소를 반환
  void remove()          //현재 위치의 요소를 삭제

List<E>에 정의된 메소드를 통해 각 요소에 접근할 수 있지만 Iterator의 장점은
컬렉션 클래스의 종류에 상관없이 동일한 형태의 데이터 참조방식을 유지하는 것이다.
즉 ArrayList<E> 나 HashSet<E> 상관없이 접근이 가능하다.


3)Set <E>
-저장 순서를 유지하지 않는다
-데이터의 중복저장을 허용하지 않는다

-HashSet<E>
-LinkedHashSet<E> : 저장순서를 유지한다.

-해쉬 알고리즘에 따라 적절히 몇 몇 메소드들을 오버라이딩할 필요가 있다.
 public int hashCode()
 public boolean equals(Object oj)
EX)
https://github.com/ehdrn3020/Java/blob/master/Collection_Framwork/hashSet_example.java


-TreeSet<E>
데이터를 정렬된 상태로 저장하는 자료구조 구현. 정렬의 기준을 프로그래머 직접 구현.

-인스턴스의 비교 기준을 정하는 Compareable <T> 인터페이스
interface Comparable<T>
{
   int compareTo(T obj){
        비교할 내용; 크면 return 1, 작으면 return -1, 같으면 return 0;
    }
}

-두개의 오프젝을 받아 정렬하는 Comparator<T> 인터페이스
  interface Comparator<T>
  {
     int compare(T o1, T o2){
       비교할 내용;
     }
  }


4)Map <k, v>

-HashMap <k,v>
-TreeMap <k,v>
예제 https://github.com/ehdrn3020/Java/tree/master/Collection_Framwork