'분류 전체보기'에 해당되는 글 57건

  1. 2009.07.08 자바 대소문자 구분없이 REPLACE 1
  2. 2009.07.01 오라클 파티션 테이블 3
  3. 2009.06.30 onsubmit 3
  4. 2009.06.26 StringBuffer 사용시 3
  5. 2009.06.25 JQUERY 동적객체 컨트롤 1
  6. 2009.06.25 LinkedHashMap
  7. 2009.06.01 pstmt.setTimestamp() 로 date형식 Insert 1
  8. 2009.06.01 jquery 에서 부모객체 참조; 2
  9. 2009.06.01 생성자 패턴 1
  10. 2009.05.22 기간검색시 종료일 처리
String sWhere = "AND F1 = '1' AND F2 = '2'";
이런저런 조건에 의해 만들어진 where 변수가 위와 같다면
"WHERE AND" 라는 이상한 구문이 되므로 첫번째 AND를 replace해버리곤 합니다.
그런데 이게 컨디션 따라 "and"로도 썼다가 "AND"로도 썼다가 하다보면 나중에 찾기도 귀찮고
"대문자로만 쓰자~" 고 해봤자 맨정신에 코딩하는사람도 얼마없죠

해서 자바 정규식 옵션을 이용해
sWhere.replaceFirst("(?i)and","");
처럼 처리해주시면 대문자건 소문자건 날려버릴수 있습니다.
다른 옵션도 많겠지만 당장 실용적인거만 적어놓고 또 일하러갑니다.
Posted by 윤재현 :

오라클 파티션 테이블

2009. 7. 1. 11:12 from DB/ORACLE
http://www.oracleclub.com/lecture/1908
후배가 SM하다가 언놈이 로그테이블 날려먹었다고 SBSB 한후에 아는거 있냐고 해서
파티션 테이블이라는걸 처음 봤네요

일단 생성쿼리는 다른 테이블과 동일하고 마지막줄에
       PARTITION BY RANGE (sale_year, sale_month, sale_day)
      
(PARTITION sales_q1 VALUES LESS THAN (2005, 01, 01) TABLESPACE ASSM_TBS1,
       
PARTITION sales_q2 VALUES LESS THAN (2005, 07, 01) TABLESPACE ASSM_TBS2,
       
PARTITION sales_q3 VALUES LESS THAN (2006, 01, 01) TABLESPACE ASSM_TBS3,
       
PARTITION sales_q4 VALUES LESS THAN (2006, 07, 01) TABLESPACE ASSM_TBS4 );
와 같이 추가적인 정의를 적어줍니다.
range에 포함된 필드값에 따라 저장될 파티션이 정해지죠
위의경우 20050101 보다 작은값은 sales_q1에, 20050701보다 작은값은 sales_q2에 저장되는 식입니다.

select는
SELECT sales_no FROM sales PARTITION (sales_q1); 하면 20050101 이하의 값들이 저장된 데이터만 조회하겠죠

처음에 로그테이블을 날렸다고 했듯 자료가 무진장 쌓이고 기간별로만 사용하는 데이터를 저장할때는 사용해도 좋을듯 싶습니다.

결론은 테이블의 저장데이터범위에 따른 파티션을 설정하고 입력은 하던대로, 조회는 파티션별로.

우리회사에서 쓸일은 없겠지만 다른회사 개발자가 덜컥 얘기 꺼냈을때 포커페이스를 유지하시려면 알아두세요
Posted by 윤재현 :

onsubmit

2009. 6. 30. 10:28 from JAVASCRIPT
<body onload="~">

window.onload = init;
이런식으로 쓰면서
<form onsubmit=""> 은 여태 그냥 놔뒀었네요.

$(document).ready( function() {
document.forms['aa'].onsubmit = checkValidation;
function checkValidation(){
  alert('곱게못넘김');
  return false;
}

위의 밑줄친 코드를 사용함으로써
form태그의 onsubmit을 제거할 수 있습니다.
Posted by 윤재현 :

StringBuffer 사용시

2009. 6. 26. 13:41 from JSP
buffer.append("list").append(i);
이걸 편의상
buffer.append("list"+i);
요런식으로 사용하는데
이러면 컴파일할때는

sb.append("list").append(i);
sb.append((new StringBuilder("list")).append(i).toString());

위와같이 컴파일됩니다.
불편해도 나눠서 쓰는게 좋을거 같아요


Posted by 윤재현 :

JQUERY 동적객체 컨트롤

2009. 6. 25. 16:33 from JAVASCRIPT
jquery는 셀렉터를 이용해 DOM에서 가져온 객체를 jquery내장함수를 이용해 다양하게 가공할 수 있다.
예를들어
<body>
  <div></div>
<script type="text/javascript">
//<![CDATA[
$(document).ready( function() {
  $('div').html('동적으로 추가된 innerHTML');
});
//]]>
</script>
</body>
※스크립트 태그는 head, 또는 body사이에만 넣을것!

위와같이 DOM을 읽어들여서 innerHTML을 수정할 수있다.
비슷한것 같지만 셀렉터로 읽어오지 않은
document.getElementsByTagName('div')[0] 에서는 html() 함수를 사용할 수 없다.
따라서
var d = document.createElement('div');
로 만들어진 div는 DOM Object가 될 수는 있지만 Jquery객체는 아니므로 Jquery에서 지원하는 내장함수들을 사용할 수 없다.

jquery의 동적이벤트 등록방식이 필요해서 위와같은 경우 처리법을 찾아봤는데 혹시나 하고
$(d).click(function(){alert();});
이렇게 써보니 Object를 Jquery객체로 인식했다. 해서
$(div).css('color','#f00').html('클릭이벤트 동적으로 등록').click(functionname).appendTo($('body'));
하게되면 onclick태그가 없이도 해당객체에 이벤트를 등록할 수 있다.
click이벤트가 아닐경우는 Jquery객체.bind('mouseover', function); 등의 형식으로 사용가능하다

그런데 $(document.createElement('div')).click(function(){alert();});
이렇게 하면 한줄이네.
Posted by 윤재현 :

LinkedHashMap

2009. 6. 25. 11:35 from JSP
이거 다 아는거겠지만 또 자세히 물어보면 모르는사람도 많고 하니 20일만에 게시물 업데이트좀 합니다.

아주 가~끔 개발할때
벡터에 꼴랑 키와 값을 담아서 꺼내야 할 경우가 있습니다.

Vector v = new Vector();
String[] arr = null;
for( int i = 0; i < 10; i++ ){
  arr = new String[2];
  arr[0] = "key";
  arr[1] = "value";
  v.add(arr);
}
String[] result = (String[])v.get(0);
System.out.println(result[0]);

이렇게 사용하겠죠
사실 그냥 맵에서 키, 값 쭉~ 찍으면 되는데 찍어보시면 알겠지만 순서가 뒤죽박죽 입니다. List형과 Map형은 그 특성이 달라서 원래 순서를 기억하기 위해서는 리스트를 쓰는게 맞긴합니다.
하지만 LinkedHashMap은 Map중에서 특이하게 순서를 기억합니다.


해서 아래와 같은코드에 생성자를 LinkedHashMap을 사용하면 입력된 순서대로 출력되고
HashMap 이나 HashTable, HashSet 이런거 쓰면 뒤죽박죽으로 나옵니다.

    LinkedHashMap m = new LinkedHashMap();
//    HashMap m = new HashMap();
    for( int i = 0; i < 10; i++ ){
      m.put( String.valueOf(i), String.valueOf(i) );
    }
    Iterator i = m.keySet().iterator();
    String temp;
    while(i.hasNext()){
      temp = String.valueOf(i.next());
      System.out.println(m.get(temp));
    }

물론 LinkedHashMap은 리스트처럼 순서를 저장하므로 성능은 다른 맵에 비해서 떨어질 수 있습니다.
얼마 차이는 안나요.
Posted by 윤재현 :


SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  //date포맷 생성

query = " INSERT INTO TBLTIME ( TIMETEST ) VALUES ( ? ) ";
pstmt = conn.prepareStatement(query);
pstmt.setTimestamp(1 , new Timestamp( sdf.parse("2009-06-01 19:02:33").getTime() )); //TimeStamp 생성 & set
pstmt.executeUpdate();

ORACLE, MSSQL, MYSQL 확인완료;
DB마다 상이한 내장함수를 사용할 필요가 없음;
(ex. TO_DATE() )


psmt.setDate()는 날짜까지만 입력이 되는데... 
원래그런건지... 그이유는..잘.; 
Posted by 알 수 없는 사용자 :

1. parent일경우

var $ = window.parent.$;

$("#name").val("우왕ㅋ굳ㅋ");

alert($("#name").val());

 

결과는 부모도큐먼트의 name객체의 value를 반환

"우왕ㅋ굳ㅋ"

출력

  

2. opener일 경우

$("#name", opener.document ).val("우왕ㅋ굳ㅋ");

alert($("#name").val());

 

opener, parent 일경우가 서로 다르다...

왜그럴까??;;

 

Posted by 알 수 없는 사용자 :

생성자 패턴

2009. 6. 1. 11:56 from JSP
텔레스코핑(telescoping) 생성자
public class Test {
  private final int servingSize;
  private final int servings;
  private final int calories;

  public Test( int servingSize, int servings ){
    this( servingSize, servings, 0 );
  }

  public Test( int servingSize, int servings, int calories ){
    this.servingSize = servingSize;
    this.servings = servings;
    this.calories = calories;
  }
}
매개변수값이 작을 경우에는 유용하지만 길어지면 파라메터의 용도파악이 어려움

자바빈즈패턴
public class Test {
  private int servingSize = -1;
  private int servings = 0;
  private int calories = 0;
  public Test( ){}
 
  public void setServingSize( int val ){
    servingSize = val;
  }
  public void setServings( int val ){
    servings = val;
  }
  public void setCalories( int val ){
    calories = val;
  }
}
객체 생성후 여러번의 setter 메소드를 호출하여 파라메터를 전달해야만 사용가능한 인스턴스를 생성할 수 있고 불변 클래스생성이 불가능;;

빌더패턴
public class Test {
  private final int servingSize;
  private final int servings;
  private final int calories;
 
  public static class Builder {
    private final int servingSize;
    private final int servings = 0;
    private final int calories = 0;
   
    public Builder( int val ){
      this.servingSize = val;
    }
    public Builder servings( int val ){
      this.servings = val;
      return this;
    }
    public Builder calories( int val ){
      this.calories = val;
      return this;
    }
    public Test build(){
      return new Test(this);
    }
  }
  private Test(Builder builder){
    servingSize = builder.servingSize;
    servings = builder.servings;
    calories = builder.calories;
  }
}
사용법::
Test a = new Test.Builder(1).servings(1).calories(1).build();

생성자에 많은 매개변수가 필요할 경우 유용함
Posted by 윤재현 :

기간검색시 종료일 처리

2009. 5. 22. 10:59 from DB
기간 검색시 시작일 2009-01-01 종료일 2009-01-03의 범위로 검색하게 되면

종료일이 2009-01-03 00:00:00 으로 변환되어 비교되므로 3일의 레코드를 검색할 수가 없어서

종료일에 하루를 더해서 작은것을 검색하도록 쿼리를 정리했습니다.
ORACLE
등록일 < to_date('2009-01-01', 'yyyy-mm-dd') + 1
MSSQL
등록일 < dateadd( day, 1, convert(datetime, '2009-01-01') )
MYSQL
등록일 < date_add(STR_TO_DATE('2009-01-01', '%Y-%m-%d' ) INTERVAL 1 DAY )
가격과 역순의 쿼리길이
Posted by 윤재현 :