반응형

http://keith-wood.name/uiTabs.html

반응형
블로그 이미지

cocy

조금은 가볍게! 시작은 새롭게!

,
반응형

이전에 살펴본 DynamicQuery부분에 사용한 옵션 외에 다양한 옵션이 제공 된다. 일반적으로 이런 옵션들을 이용할때 DAO에 쿼리가 박혀있을 경우 매우 복잡해진다. 따라서 스토어드 프로시저를 이용한다거나 하는 방식을 택하게 되는데, iBATIS에서 지원하는 옵션들을 살펴보자

  1. <!--property가 존재 하는지 검사(map의경우 property를 key로 검색실패) -->  
  2. <isPropertyAvailable property=""></isPropertyAvailable>  
  3. <!--property가 존재 하지 않는지 검사(map의경우 property를 key로 검색실패) -->  
  4. <isNotPropertyAvailable property=""></isNotPropertyAvailable>  
  5.   
  6. <!--property가 null인지 검사 -->  
  7. <isNotNull property=""></isNotNull>  
  8. <!--property가 null이 아닌지 검사 -->  
  9. <isNull property=""></isNull>  
  10.   
  11. <!-- property가 비어있는지 검사("".equals) 검사-->  
  12. <isEmpty prepend=""></isEmpty>  
  13. <!-- property가 비어있지 않은지 검사(!"".equals) 검사-->  
  14. <isNotEmpty prepend=""></isNotEmpty>  
  15.   
  16. <!-- property가 비교값과 같은지 검사-->  
  17. <isEqual property="" compareValue="" compareProperty=""></isEqual>  
  18. <!-- property가 비교값과 같지 않은지 검사-->  
  19. <isNotEqual property="" compareValue="" compareProperty=""></isNotEqual>  
  20.   
  21. <!-- property가 비교값보다 큰지 검사 -->  
  22. <isGreaterThan property="" [compareValue="" || compareProperty=""]></isGreaterThan>  
  23. <!-- property가 비교값보다 큰거나 같은지  검사 -->  
  24. <isGreaterEqual property="" [compareValue="" || compareProperty=""]></isGreaterEqual>  
  25. <!-- propety가 작은지 검사 -->  
  26. <isLessThan property="" [compareValue="" || compareProperty=""]></isLessThan>  
  27. <!-- propety가 작거나 같은지  검사 -->  
  28. <isLessEqual property="" [compareValue="" || compareProperty=""]></isLessEqual>  
  29.   
  30.  <!-- property를 반복하며 추가. 반복시 값의 사이에 conjunction정의 문자 삽입 -->  
  31.  <iterate property="" open="(" close=")" conjunction=","></iterate>  

그냥 눈으로만 봐도 충분히 숙지할 수 있는 사항이므로 별도의 설명은 하지 않겠다. 조건에 property는 당연히 들어가는것이 원칙이다. 비교할 대상이나 검사할 대상이 없다면 뭐하러 이런 조건을 사용 하겠는가? 어렵지 않은 내용이지만 한가지 숙지해야 할 사항이 있다. 

바로 이항연산자 부분에서 compareValue와 compareProperty인데 다른 부분은 property를 이용해 비교했다. 같은 property가 들어가는걸로 보아 compareProperty는 프로퍼티 중에서 비교하는 것을알수 있다.즉 '같이 넘어온 객체의 프로퍼티와 비교'하여 구문을 추가할지 선택하는것이다.

compareValue는 정적인 값이다. 예를들어 조건이 '성적이 100점 이하'일 경우 100은 정적인 값이다. 만약 이것을 compareProperty로 이용한다면 사용할때마다 '100'의 값을 셋팅해야할 것이다. 이럴때  compareValue를 이용하면 프로그램 코드에 별도로 관리할 필요가 없으므로 유용하게 사용할수 있다. 그럼 예제를 살펴보자.


boardManager.xml

  1. <typeAlias alias="boardbean" type="pupustory.ibatis.beans.BoardBean"/>  
  2.   
  3.  <resultMap class="boardbean" id="boardbean">  
  4.     <result property="postId" column="post_Id"/>  
  5.     <result property="postTitle" column="post_Title"/>  
  6.     <result property="postWriter" column="post_Writer"/>  
  7.     <result property="postBody" column="post_Body"/>  
  8.  </resultMap>  
  9.     
  10.  <parameterMap class="boardbean" id="boardbean">  
  11.     <parameter property="postId" />  
  12.     <parameter property="postTitle"/>  
  13.     <parameter property="postWriter"/>  
  14.     <parameter property="postBody"/>  
  15.  </parameterMap>  
  16.     
  17.  <select id="select.board" resultMap="boardbean"    
  18.     parameterClass="boardbean" >  
  19.   SELECT    
  20.     A.POST_ID AS POST_ID   
  21.     ,A.POST_TITLE AS POST_TITLE   
  22.     ,A.POST_WRITER AS POST_WRITER   
  23.     ,B.POST_BODY AS POST_BODY   
  24.   FROM TB_MAIN_BOARD A, TB_SUB_BOARD B   
  25.   WHERE A.POST_ID = B.POST_ID   
  26.   <dynamic open="" close="">  
  27.     <isNull  prepend=" AND " property="postId">  
  28.         11=1   
  29.     </isNull>    
  30.    <isNotNull prepend=" AND "  property="postId">  
  31.         a.post_id = #postId#   
  32.    </isNotNull>  
  33.        
  34.     <isNotNull prepend=" AND " property="postTitle">  
  35.         post_title like '%' || #postTitle# || '%'    
  36.     </isNotNull>  
  37.        
  38.     <isNotNull prepend=" AND " property="postWriter">  
  39.         post_Writer like '%' || #postWriter# || '%'    
  40.     </isNotNull>  
  41.        
  42.     <isNotNull prepend=" AND " property="postBody">  
  43.         post_body like '%' || #postBody# || '%'    
  44.     </isNotNull>  
  45.   
  46.   
  47.   </dynamic>  
  48.  </select>  
  49.     
  50. <insert id="insert.main.board" parameterClass="boardbean">  
  51.     insert into tb_main_board    
  52.     values(#postId#,#postTitle#,#postWriter#)   
  53. </insert>  
  54.   
  55. <insert id="insert.sub.board" parameterClass="boardbean">  
  56.     insert into tb_sub_board(post_id, post_body)   
  57.     values(#postId#,#postBody#)   
  58. </insert>  
  59.  </sqlMap>  


BoardBean.java

  1. package pupustory.ibatis.beans;   
  2.   
  3. public class BoardBean {   
  4.     String postId;   
  5.     String postTitle;   
  6.     String postWriter;   
  7.     String postBody;   
  8.     public String getPostBody() {   
  9.         return postBody;   
  10.     }   
  11.     public void setPostBody(String postBody) {   
  12.         this.postBody = postBody;   
  13.     }   
  14.     public String getPostId() {   
  15.         return postId;   
  16.     }   
  17.     public void setPostId(String postId) {   
  18.         this.postId = postId;   
  19.     }   
  20.     public String getPostTitle() {   
  21.         return postTitle;   
  22.     }   
  23.     public void setPostTitle(String postTItle) {   
  24.         this.postTitle = postTItle;   
  25.     }   
  26.     public String getPostWriter() {   
  27.         return postWriter;   
  28.     }   
  29.     public void setPostWriter(String postWriter) {   
  30.         this.postWriter = postWriter;   
  31.     }   
  32.     public String toString() {   
  33.         return "postId["+postId+"]"  
  34.         +"postTitle["+postTitle+"]"  
  35.         +"postWriter["+postWriter+"]"  
  36.         +"postBody["+postBody+"]";   
  37.     }   
  38. }  


 BoardBiz.java

  1. package pupustory.ibatis.board;   
  2.   
  3. import pupustory.ibatis.manager.DBManager;   
  4. import pupustory.ibatis.beans.BoardBean;   
  5. import java.sql.SQLException;   
  6. public class BoardBiz {   
  7.     DBManager manager = DBManager.getInstance();   
  8.     // 가상 데이터 삽입   
  9.     public void insertVirData() throws SQLException{   
  10.         BoardBean bean = null;   
  11.         final int MAX_BOARD_DATA = 10;   
  12.            
  13.         manager.startTransaction();   
  14.         manager.startBatch();   
  15.            
  16.         for (int i=0;i<MAX_BOARD_DATA;i++) {   
  17.             bean = new BoardBean();   
  18.             bean.setPostId(i+"");   
  19.             bean.setPostTitle("제목! "+i);   
  20.             bean.setPostWriter("pupustory"+i);   
  21.             bean.setPostBody("본문 히히히히 헤헤"+i);   
  22.             manager.getMapper().insert("insert.main.board", bean);   
  23.             manager.getMapper().insert("insert.sub.board", bean);   
  24.         }   
  25.            
  26.         manager.executeBatch();   
  27.         manager.commitTransaction();   
  28.     }   
  29.   
  30.     // 게시물 조회   
  31.     public java.util.List getPost(BoardBean bean)    
  32.         throws SQLException {   
  33.         return    
  34.         (java.util.List)manager.getMapper().queryForList("select.board",bean);   
  35.     }      
  36. }  

 

StartApp.java

  1. package pupustory.ibatis.board;   
  2. import java.sql.SQLException;   
  3. import pupustory.ibatis.beans.BoardBean;   
  4.   
  5. public class StartApp {   
  6.     public static void main(String ar[]) throws SQLException{   
  7.         BoardBiz biz = new BoardBiz();   
  8.         //biz.insertVirData();   
  9.         BoardBean bean = null;   
  10.         java.util.List list = biz.getPost(bean);   
  11.         for (int i=0;i<list.size();i++) {   
  12.             System.out.println(list.get(i).toString());   
  13.         }   
  14.            
  15.         bean = new BoardBean();   
  16.         // id 3번 게시물 조회   
  17.         bean.setPostId("3");   
  18.         list = biz.getPost(bean);   
  19.         for (int i=0;i<list.size();i++) {   
  20.             System.out.println(list.get(i).toString());   
  21.         }   
  22.            
  23.         // 본문에 '4'문자 포함한 게시물 조회   
  24.         bean = new BoardBean();   
  25.         //bean.setPostId("2");   
  26.         bean.setPostBody("4");   
  27.         list = biz.getPost(bean);   
  28.         for (int i=0;i<list.size();i++) {   
  29.             System.out.println(list.get(i).toString());   
  30.         }   
  31.     }   
  32. }  


조회조건에 들어올 값을 확인하고, null이 아닐경우 검색해서 출력한다. equal같은 검색조건을 추가하려 했지만.. 귀찮기도해서 --; 어차피 사용법은 동일하다. 그리고 dynamic부분의 prepend는 삭제했다. 이유는 이미 join을 하기위해 where를 호출했고, 뒤에 올 조건이 있을지 없을지 미지수다. 따라서 삭제 했다. 1=1은 게시 전에 몇가지 만지작 거리다 남은 코드이므로 무시해도 무관하다.

단항,이항 검색조건은 위와 같이 수행하면 되므로 어려울 것이 없다. 그렇다면 이번엔 이터레이터에 대해 알아볼 것이다. 이전에 설명 했지만 만약 사용자가 ' where board_id in (....) '와 같이 몇건이 들어올지 모르는 경우에 유용 하다. 

이부분은 $$를 이용한 statment를 이용할 수도 있겠지만 이건 매우 위험하다. sql injection때문에 그렇다. 어플에서 .replace했다면 상관 없겠지만 그래도 프레임워크를 이용하니 .. 기능을 이용해 보도록 하자.

먼저 IN ( ...) 부분엔 정확히 얼마의 문자가 올지 모른다. 한가지 유추할 수 있는 것은 여기엔 배열이 적합한 것 이다. 새로운 예를 만드는 것 보다 위의 코드를 조금 변경해 작성하도록 하자. 먼저 빈즈에 POST_ID값이 저장될 배열 변수를 하나 추가한다.

  1. private String rePostId;   
  2. public String getRePostId() {   
  3.     return rePostId;   
  4. }   
  5. public void setRePostId(String rePostId) {   
  6.     this.rePostId = rePostId;   
  7. }   
  8.   
  9. public String toString() {//toString()는 값 확인을 위해 변경 함   
  10.     return "postId [" +rePostId+"]"  
  11.         +" postTitle [" +postTitle+"]"  
  12.         +" postWriter [" +postWriter+"]"  
  13.         +" postBody [" +postBody+"]"  
  14.         +" parentPostId [" +parentPostId+"]";   
  15. }  


이제 중요한 sqlmap부분이다.

  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE sqlMap         
  3.     PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"         
  4.     "http://ibatis.apache.org/dtd/sql-map-2.dtd">  
  5.   
  6. <sqlMap namespace="UserManager">  
  7. <typeAlias alias="postreply" type="pupustory.ibatis.beans.PostReplyBean"/>  
  8.   
  9.  <resultMap class="postreply" id="postreply.result" >  
  10.   <result property="rePostId" column="POST_ID" />  
  11.   <result property="postTitle" column="POST_TITLE" />  
  12.   <result property="postWriter" column="POST_WRITER" />  
  13.   <result property="postBody" column="POST_BODY" />  
  14.   <result property="parentPostId" column="PARENT_POST_ID" />  
  15.  </resultMap>  
  16.   
  17.  <parameterMap class="postreply" id="postreply.param">  
  18.   <parameter property="postId" />  
  19.   <parameter property="postTitle"/>  
  20.   <parameter property="postWriter"/>  
  21.   <parameter property="postBody" />  
  22.   <parameter property="parentPostId"/>  
  23.  </parameterMap>  
  24.     
  25.  <select id="select.dynamic.query" resultMap="postreply.result"    
  26.     parameterClass="postreply" >  
  27.   SELECT * FROM TB_QNA_BOARD   
  28.   <dynamic prepend="WHERE">  
  29.     <iterate property="postId"    
  30.     conjunction="," open="post_id IN (" close=")" >  
  31.     #postId[]#   
  32.     </iterate>  
  33.   </dynamic>  
  34.  </select>  
  35.  </sqlMap>  


반복 부분을 iterator를 사용했다. 실행코드를 살펴보자.

  1. package pupustory.ibatis.dynamicquery;   
  2. import pupustory.ibatis.beans.PostReplyBean;   
  3. public class StartApp {   
  4.     public static void main(String ar[]) throws java.sql.SQLException {   
  5.         PostReplyBean bean = new PostReplyBean();   
  6.   
  7.         DynamicQueryBiz biz = new DynamicQueryBiz();   
  8.         String[] postIds = {"1","2","4","5","7","9"};   
  9.         bean.setPostId(postIds);   
  10.         java.util.List list = biz.getPostBoard(bean);   
  11.         if (list.get(0instanceof PostReplyBean) {   
  12.             System.out.println("true");   
  13.         }   
  14.         for (int i=0;i<list.size();i++) {   
  15.             bean = (PostReplyBean)list.get(i);   
  16.             System.out.println(bean.toString());   
  17.         }   
  18.     }   
  19. }  

어려운 구문은 없다. xml에서 open부분에 in ( 를 추가 했고, 배열마다 구분문자는 ','로 지정했다. 완료 후 ) 로 닫으니 

SELECT * FROM TB_QNA_BOARD WHERE POST_ID IN ('1','2','4','5','7','9');

 

와 같은 sql 구문이 생성 된다. resultMap에선 실제 우리가 가져와야 할 빈의 변수와 맵핑하면 된다.

 

[출처] http://pupustory.tistory.com/184

반응형
블로그 이미지

cocy

조금은 가볍게! 시작은 새롭게!

,
반응형

1. 기본 쓰레드 함수

(1) pthreard_create

쓰레드 생성을 위해 사용(pthread_t)

첫번째 인자는 쓰레드 식별자

세번째 인자는 쓰레드 실행시 호출되는 함수

네번째 인자는 그 함수의 인자

리턴값은 쓰레드 ID

실행된 쓰레드에 대해서는 pthread_join 등의 함수를 이용해서 쓰레드 종료 때까지 기다려줘야 한다. pthread_join은 일종의 fork의 wait와 비슷하게 동작하며, 쓰레드 자원을 해제시켜 준다.

ex) thr_id = pthread_create(&p_thread[1], NULL, t_function, (void *)&a);


(2) pthread_join

첫번째 인자는 기다릴(join)할 쓰레드 식별자

두번째 인자는 쓰레드의 return값

두번째 인자가 NULL이 아닐 경우 해당 포인터로 쓰레드 return값을 받아올 수 있다.

ex) pthread_join(p_thread, (void *)&status);


(3) pthread_detach

detach는 "떼어내다"라는 뜻을 가지며, main 쓰레드에서 pthread_create를 이용해 생성된 쓰레드를 분리시킨다.

이 함수는 식별번호(첫번째 인자)인 쓰레드를 detach시키는데, detach 되었을 경우, 해당(detach)된 쓰레드가 종료될 경우 pthread_join을 호출하지 않더라도 즉시 모든 자원이 해제(free) 된다.

detach를 하지 않을 경우, 쓰레드 함수가 종료되더라도 자원이 해제되지 않는다.

pthread_create 호출 후 detach할 수 도 있고, pthread_create 호출시에 쓰레드가 detach 되도록 할 수도 있다.(pthread_attr_setdetachstate 참조)

ex) pthread_detach(p_thread);


(4) pthread_exit

현재 실행 중인 쓰레드를 종료시키고자 할 때 사용한다.

pthread_cleanup_push가 정의되어 있다면, pthread_exit가 호출될 경우 cleanup handler가 호출된다. 보통 이 cleanup handler는 메모리를 정리하는 등의 일을 하게 된다.

ex) pthread_exit(0);


(5) pthread_cleanup_push

cleanup handler를 인스톨하기 위해서 사용된다.

pthread_exit가 호출되어서 쓰레드가 종료될 때 pthread_cleanup_push에 의해서 인스톨된 함수가 호출된다.

첫번째 인자가 쓰레드가 종료될 때 호출되는 함수이다.

두번째 인자는 이 때의 아규먼트이다.

cleanup handler는 주로 자원을 돌려주거나, mutex 잠금등의 해제를 위한 용도로 사용된다. 만약 mutex 영역에서 pthread_exit가 호출되어 버릴 경우, 다른 쓰레드에서 영원히 block 될 수 있기 때문이다.

또, malloc 으로 할당받은 메모리, 열린 파일지정자를 닫기 위해서도 사용한다.

ex) phread_cleanup_push(cleanup, (void *)&a);


(6) pthread_cleanup_pop

pthread_cleanup_push와 함께 사용되며, cleanup handler를 제거하기 위해서 사용된다.

pthread_cleanup_push와 pthread_cleanup_pop은 반드시 같은 함수 내의 같은 레벨의 블럭에서 한 쌍으로 사용해야 한다.


(7) pthread_self

pthread_self를 호출하는 현재 쓰레드의 쓰레드 식별자를 리턴한다.

ex) ptread_t id;        id = pthread_self();


2. 쓰레드 동기화 함수


(1) pthread_mutex_init

(2) pthread_mutex_distroy

(3) pthread_mutex_lock

(4) pthread_mutex_unlock

(5) pthread_cond_init

(6) pthread_cond_signal

(7) pthread_cond_boradcast

(8) pthread_cond_wait

(9) pthread_cond_timewait

(10) pthread_cond_destroy

(11) 예제 코드


3. Thread Attribute 함수


(1) pthread_attr_init

(2) pthread_attr_distroy

(3) pthread_attr_getscope

(4) pthread_attr_setscope


4. 쓰레드 시그널 관련


(1) pthread_sigmask

(2) pthread_kill

(3) sigwait


5. 쓰레드 취소

(1) pthread_cancel

(2) pthread_setcancelstate

(3) pthread_getcancelstate


반응형
블로그 이미지

cocy

조금은 가볍게! 시작은 새롭게!

,
반응형

cs07488@cs1 ~/2013/os $ gcc -lrt prime.c


위와같이 컴파일하여 a.out파일이 나왔다 치자,


cs07488@cs1 ~/2013/os $ time ./a.out


위처럼 time을 앞에써주고 실행을 시키면 


real    0m0.009s

user    0m0.002s

sys     0m0.005s


결과와 함께 위의 세줄이 나오는것을 확인 할 수 있다.

user의 경우 user영역에서 실행된 시간,
sys의 경우 커널에서 실행된 시간,
real은 이를 합산한 총 실행시간이다.

반응형

'코드자료실 > linux / c' 카테고리의 다른 글

[리눅스, c] pthread  (0) 2013.01.07
[리눅스, c] vi 에디터 사용법  (0) 2013.01.07
블로그 이미지

cocy

조금은 가볍게! 시작은 새롭게!

,
반응형

vi 에디터 사용법

 

 명령모드에서 입력모드 상태로 전환하는 명령어

i : 현재 커서의 위치에 글자를 삽입

I : 커서가 있는 줄(line) 의 맨 앞에 글자를 삽입

a : 현재 커서 위치에 다음 칸에 글자를 추가

A : 커서가 있는 줄(line)의 맨 뒤에 글자를 삽입

o : 현재의 줄 다음에 새로운 줄을 삽입

O : 현재의 줄 아에 새로운 줄을 삽입

 

 

* 특수한 입력 명령어

r : 현재 커서 위치의 1개 문자를 교체

R : 현재 커서 위치부터 <ESC>키 입력 할 때까지 글자 교체

cc :  현재 커서 위치의 행을 교체(다 지워짐)

cw :  현재 커서 위치부터 1개 단어를 교체


w :  다음 낱말의 시작부분

e :  다음 낱말의 끝 부분

b :  이전 낱말의 시작 부분

 

(,) : 문장 단위의 이동

{,} : 문단(단락) 단위의 이동

 

<CTL> + B : befor page

<CTL> + F : next page

 

0 : 현재 행의 맨 앞

$ : 현재 행의 가장 마지막 문자

^ : 현재 행의 맨 앞 문자

gg : 첫 행의 맨 앞

G : 문서의 마지막 줄

nG : n번째 줄

 

H : 스크린의 첫 행의 맨 앞

M : 스크린의 가운데 행의 맨 앞

L :  스크린의 가운데  행의 맨 앞

<ENTER> : 다음행의 맨 앞

:n  : n번째 줄
<CTL> + g : 현재 커서 위치 출력

 

 

x, X : 현재 커서 위치(혹은 왼쪽)의 1개 문자 삭제

nx, nX: 현재 커서 위치(혹은 왼쪽)의 n개 문자 삭제

dd :  현재 커서가 위치한 행을 삭제

 

 

u : 이전 명령어 실행 취소

. : 마지막 편집 명령어 반복 실행

 

 

v : vi 에디터 하단에 visual 표시가 나타나고 블럭 지정이 시작됨

d : 블럭으로 지정한 부분을 삭제

y : 블럭으로 지정한 부분을 복사

 

yy, nyy : 커서위치의 행(혹은 n개의 행)을 복사

dd, ndd : 커서위치의 행(혹은 n개의 행)을 삭제하면서 동시에 복사

p : 복사된 내용을 커서의 뒷부분에 붙임

P : 복사된 내용을 커서의 앞부분에 붙임

 

 

 

vi의 문자열 검색


/문자열 : 현재 커서 위치의 아래쪽으로 문자열 검색

?문자열 : 현재 커서 위치의 위쪽으로 문자열 검색

n :  이전 검색한 문자열에 대해서 동일 방향으로 검색

N : 이전에 검색한 문자열에 대해서 반대 방향으로 검색

 


문자열 치환


:s/regexp/rep

 -> 현재 커서가 위한 행에서 첫번째 "regexp" 문자열을 찾아서 "rep"로 치환

 

:s/regexp/rep/g

-> 현재 커서가 위한 행에서 모든 "regexp"문자열을 찾아서 "rep"로 치환

 

:%s/regexp/rep/g

-> 문서내부의 모든 "regexp"문자열을 찾아서 "rep"로 치환

 

:%s/regexp/rep/gc

-> 문서내부의 모든 "regexp"문자열을 찾아서 "rep"로 치환하는 과정마다 사용자의 확인을 입력받음

반응형

'코드자료실 > linux / c' 카테고리의 다른 글

[리눅스, c] pthread  (0) 2013.01.07
[리눅스] time 명령어 - 실행시간 측정  (0) 2013.01.07
블로그 이미지

cocy

조금은 가볍게! 시작은 새롭게!

,
반응형

압축된(min) 자바스크립트 파일을 프로젝트에 추가하면 javascript validator 규격(ECMA-262)에 적합하지 않은 형태가 되어 프로젝트 익스플로러 상에 우측하단에 에러표시(빨간 표시)가 뜨게된다.


이를 제거하기 위해서 특정 파일이나 패턴을 이용해 문법검사를 스킵하는 방법이 있다.


1) Project->Properties->JavaScript->Include Path->Source


2) Inclusion and Exclusion Patterns 창에서 Exclusion patterns Add 버튼 클릭


(해당 파일을 validation 목록에서 제외)


3) 상황에 적합한 패턴 입력 (예 : **/jquery*.js ) 


4) 적용시키면 에러 표시 제거됨




반응형

'코드자료실 > IDE / tool' 카테고리의 다른 글

[스크랩] Maven 개요  (0) 2013.03.02
[eclipse] 컴파일이 안먹을때  (0) 2013.02.20
블로그 이미지

cocy

조금은 가볍게! 시작은 새롭게!

,
반응형
* 문자 수치, 수치 문자의 변환 1. 문자 -> 수치 - 변환하려는 값이 정수값이 확실할 때는 parseInt, 소수값일 가능성이 있는 경우는 parseFloat를 사용한다. 또한 수치가 아닌 수식(평가식)일 때는 eval을 사용한다. eval의 경우 다음과 같이 문자열 안에 변수도 포함시킬 수 있다.
     eval("1+2+3+Math.PI")
  
- 변수에 들어있는 값이 수치인지 문자인지를 모를 때에는 typeOf를 사용하며, typeOf 구문은 변수에 들어 있는 값이 수치이면 number, 문자열이면 string을 결과로 구해준다. 문자열이 수식인 경우 isFinite를 사용하여 eval 명령으로 연산 가능한지 여부를 조사할 수 있다. IsFinite 구문은 넷스케이프 4와 익스플로러 4 이후에서만 사용할 수 있으며 다음과 같이 사용하면 보다 안전하게 연산을 수행할 수 있다
     a = "12+34*7";
     if ( isFinite(a) ) eval(a);
  
반응형

'코드자료실 > javascript' 카테고리의 다른 글

[jquery] jsonp 사용  (0) 2013.01.24
[jquery] jquery ui tabs  (0) 2013.01.16
[링크] 자바스크립트 라이브러리 정리 사이트  (0) 2012.12.23
jquery.jpg  (1) 2012.12.23
브라우져 종류 체크 스크립트  (0) 2012.12.21
블로그 이미지

cocy

조금은 가볍게! 시작은 새롭게!

,
반응형

* 1~10, 11~20 등의 페이징을 처리하는 오라클 쿼리 

 - end 와 start 값에 적절한 값을 넣어주도록 함.

 - TABLE : 테이블 병, SEQ : 정렬하고자 하는 기준 컬럼


select * 
from ( select rownum rn, T1.* from ( select * from TABLE order by SEQ) T1 where rownum <= #end# ) 
where rn >= #start#
  


반응형

'코드자료실 > database' 카테고리의 다른 글

[oracle] 리눅스에서 덤프파일 사용  (0) 2013.03.12
[oracle] 문자 조작 함수  (0) 2013.02.20
[oracle] delete data 복구  (0) 2013.02.12
[database] varchar2 vs nvarchar2  (0) 2013.01.25
[Oracle] DATE 포맷 변경  (0) 2012.12.23
블로그 이미지

cocy

조금은 가볍게! 시작은 새롭게!

,
반응형



 
	/** cache 비활성화 */
	String httpVersion=request.getProtocol();
	if(httpVersion.equals("HTTP/1.0")) {
		response.setDateHeader("Expires",-1);
		response.setHeader("Pragma","no-cache");
	}else if(httpVersion.equals("HTTP/1.1")) {
		response.setHeader("Cache-Control","no-cache");
	}
	
  
반응형

'코드자료실 > java / jsp' 카테고리의 다른 글

getSession 사용법  (0) 2013.07.02
[jstl] request 객체 접근하기  (0) 2013.01.24
[java] 개행문자 제거하기  (0) 2012.11.29
블로그 이미지

cocy

조금은 가볍게! 시작은 새롭게!

,
반응형
* DATE 포맷을 변경함
  현재 접속한 계정에 한 해 한시적으로 변경된다.
  - sqldeveloper에서 insert 쿼리를 export 할 경우 date 포맷의 값인 상태에서 export 할 경우
    시/분/초 값이 나오질 않음. 아래 쿼리 실행 후 export 하기를 권장.
    - TOAD에서는 별도의 설정없이도 원하는 값을 export 할 수 있음


alter session set NLS_DATE_FORMAT='rrrr/mm/dd HH24:MI:SS'
  


YYYY-MM-DD HH24:MI:SS


* HH24로 설정해야 21시, 22시 등으로 값이 표시됨.

  HH로 할 경우 21시는 09, 22시는 10으로 나타난다. 기간 검색할 시 주의

반응형

'코드자료실 > database' 카테고리의 다른 글

[oracle] 리눅스에서 덤프파일 사용  (0) 2013.03.12
[oracle] 문자 조작 함수  (0) 2013.02.20
[oracle] delete data 복구  (0) 2013.02.12
[database] varchar2 vs nvarchar2  (0) 2013.01.25
[Oracle] 페이징 쿼리  (0) 2012.12.23
블로그 이미지

cocy

조금은 가볍게! 시작은 새롭게!

,