자바스크립트 날짜 계산

개발/실전 2016. 6. 20. 16:08

1. 날짜를 임의로 입력했을 경우 원하는 일수를 더해야 한다. (여기선 일수를 7일로 잡아 봅니다.)

2. 입력 받을 날짜 타입은 "YYYYMMDD" 로 가정합니다.

 

<form name="test"> <!-- 임의의 폼 -->

<input type="text" name="startDate" onkeyup="javascript:dateChk()"> <!-- 임의의 날짜를 입력 받아서 function 호출-->

<span id = endDate"></span><!-- 계산된 날짜가 나올 수 있는 부분 -->

</form>

 

<script>

function dateChk()

{

var frm = document.test;

var startDate = frm.startDate.value;

if(startDate.length == 8)    //입력 받은 날짜 길이가 8자리 이므로

{

startDate = new Date(startDate.substring(0,4),startDate.substring(4,6)-1,startDate.substring(6,8);  //년, 월, 일 형식으로 선언합니다.

//월에 -1을 해주는 이유는 6월을 넣었으면 스크립트는 0부터 시작하기때문에 5월로 인식한다.

 

startDate.setDate(startDate.getDate() + 7); //Date에 7을 더해줍니다

//마찬가지로 년도에 더할 경우 startDate.getFullYear() + 7을

//월에 더할 경우 startDate.getMont() + 7

endDate.innerHTML = startDate.getFullYear() + (startDate.getMonth()+(1*1) + startDate.getDate();

//위에서 선언한 span id 값에 표시를 해줍니다.

//월에 +1을 해주는 이유는 사람이 볼때 원상복구를 시키기 위해서

}

}

</script>

 

※ 날짜 받는 형식이 아래와 같다면 이렇게 처리 하면 됩니다.

var startDate= "2015-5-6";
var arr = startDate.split('-');
startDate = new Date(arr1[0], arr1[1], arr1[2]);

 

더보기 클릭 했을때

개발/실전 2016. 3. 30. 11:25

조건 : 화면에 3개의 이미지가 있다. '더보기' 버튼을 클릭하면 3개가 더 보여져야한다.

 

int listMore = 3;    //최초 3개의 이미지를 보여준다
int totalCnt = 9;    //DB 값에서 리스트의 갯수를 받아올 변수(여기선 9로 지정)

 

-- 화면에 보여질 내용 --

<div class="tbl_area" id="dispRow1>" style="display:none">내용</div>
<div class="tbl_area" id="dispRow2>" style="display:none">내용</div>
<div class="tbl_area" id="dispRow3>" style="display:none">내용</div>
.
.
.

<div class="tbl_area" id="dispRow<%=cnt%>" style="display:none">내용</div> //마지막은 dispRow9 가 된다.


<divid="dispMore" style="display:none">
 <a href="javascript:listMore('<%=totalCnt%>')">더보기</a>
</div>

-- 화면에 보여질 내용 END --


스크립트로 화면이 보여질때 실행 되도록 해준다

<script>
<%
 for (int i=1;i<=totalCnt;i++) //totalCnt 리스트의 최대 갯수만큼 실행 (3번)
 {
      if (i<=listMore)
      {
%>
          document.getElementById("dispRow<%=i%>").style.display = 'block'; //최대 갯수 보다 작거나 같으면 이미지를 보여준다
<%
      }
 }
 if (totalCnt > listMore) //listMore은 현재 화면에 보여주는 이미지 갯수
 {
%>
  document.getElementById("dispMore").style.display = 'block'; //최대갯수보다 화면에 보여주는 이미지 갯수보다 작으면 더보기 버튼을 보여준다
<%
 }
%>
</script>

 

<script>

  function listMore(totalCnt) //더보기 버튼을 눌렀을때 실행되는 함수
  {
   var listMore = document.frmSet.listMore.value; //현재 화면에 보여지는 리스트 갯수를 가져온다(3개)

   var last = Number(listMore) + 3; //더보기를 누르면 3개씩 추가 된다
   
   for (i=Number(listMore)+1;i<=totalCnt;i++) // i=(3+1) -> 최초3개만 보여주니까 다음부턴 4부터 6까지; 4보다 최대 갯수가 같거나 클때 까지; i= 4++
   {
    if (i<=last) // i가 6보다 작거나 같을경우
    {
     document.getElementById("dispRow"+i).style.display = 'block'; //dispRow6 까지 block 처리를 한다
    }
   }
   document.frmSet.listMore.value = last;

   if (totalCnt <= last)
   {
    document.getElementById("dispMore").style.display = 'none'; //더보기 버튼이 최대갯수보다 크거나 작으면 none 처리
   }
  }

</script>

메뉴 클릭하면 이미지 변경

개발/코딩 2016. 3. 21. 16:20

라디오 버튼 등 이벤트를 발생 시키면 이미지를 변경하고자 했을 때.

<img id="imgUsim" src="이미지.png">

최초 기본 이미지를 설정한다.( id 값을 설정해준다 )

<input name="comType" type="radio" value="A" onClick="javascript:chgUsim(A);"/>

<input name="comType" type="radio" value="B" onClick="javascript:chgUsim(B);"/>

두개의 라디오 버튼을 만들어 준뒤 클릭하면 함수를 불러온다

 function chgUsim(comType)
 {
  var comType = comType;
  if(comType == "A")
  {
   document.getElementById("imgUsim").src="A.png";
  }
  else if(comType =="B")
  {
   document.getElementById("imgUsim").src="B.jpg";
  }
 }

함수 불렀을때 값에 따라서 id값의 이미지를 변경해준다.

'개발 > 코딩' 카테고리의 다른 글

아이디 입력시 특수문자 확인  (0) 2017.04.20
JSP 드래그, 오른쪽 클릭 막기  (0) 2017.01.25
url로 파일 다운로드  (0) 2015.03.12
JSON 파싱 사용하기  (0) 2015.03.12
session을 통해 값넘기기  (0) 2014.06.11

자바 세마포어( JAVA Semaphore )

개발/이론 2015. 12. 29. 17:36

- 프로세스간 메세지 전송을 하거나, 혹은 공유메모리를 통해서 특정 data를 공유하게 될경우

   발생하는 문제는, 공유된 자원에 여러개의 프로세스가 동시에 접근을 하면서 발생한다. 

   단지 한번에 하나의 프로세스만 접근 가능하도록 만들어 줘야 하고,

   이때 세마포어를 쓴다.

 

- 쓰레드에서는 뮤텍스, 프로세스에서는 세마포어

- 교착상태

 

 

A 프로세스가 k 에 접근하고 나오면 k = 2 라는 값을 예상할수 있다.

   A 프로세스가 k 에 접근했을때, B 프로세스가 k 에 접근을 하고 일을 하고 나오면, k = 2 가 되고,

   A 프로세스가 그후로 일을 하면 k = 3 이 된다.

   즉, 예상한 값을 얻을수 없다.

   이를 방지 하기 위해,

   A 프로세스가 접근 했을때 다른 프로세스의 접근을 막고,

   끝난후 접근을 풀어 준다.

   이를 세마포어로 접근을 막고 접근을 허용 할수 있다.   

 

- 차단을 원하는 자원에 대해서 semaphore를 생성하면 해당자원을 가리키는

   semaphore 값이 할당 된다.

   이 값이 0 이면 해당자원에 접근할수 없고,

              0 보다 크면 해당자원에 접근할수 있다.

 

 

-  그러므로, 자원에 접근하기 전에 semaphore 값을 검사해서

   값이 0이면 자원을 사용할수 있을때까지 기다리고,

   0보다 더 크면 자원에 접근해서 semaphore 값을 0 으로 감소 시켜서,

   다른 프로세스가 자원에 접근 할수 없도록 하고,

   자원의 사용이 끝나면 다시 semaphore 값을 증가 시켜 다른프로세스가 사용할수 있게 해준다.

 

 

 

 

 

 

==== 세마포어 예제 ===

 

package mvnoServer;
import java.util.concurrent.Semaphore;


public class semaphoer_test
{
 public static void main(String[] args)
 {
  Semaphore se = new Semaphore(3);
  SyncMulti th1 = new SyncMulti(se,"1");
  SyncMulti th2 = new SyncMulti(se,"2");
  SyncMulti th3 = new SyncMulti(se,"3");
  SyncMulti th4 = new SyncMulti(se,"4");
  
  th1.start();
  th2.start();
  th3.start();
  th4.start();
  
 }
}
-----------------------------------------------

 

package mvnoServer;
import java.util.concurrent.Semaphore;


public class SyncMulti extends Thread
{

 // 동시에 수행될 수 있는 스레드의 개수를 설정 하는 클래스


 Semaphore sem;
 String msg;
 public SyncMulti(Semaphore sem, String msg)
 {
  super();
  this.sem = sem;
  this.msg = msg;
 }
 public void run()
 {
  try
  {
   sem.acquire(); //실행한다.
   System.out.println(msg);
   Thread.sleep(5000);  //5초간 딜레이
   sem.release(); //끊어준다

  //세마포어를 실행시키고 5초 후에는 세마포어를 끊어준다.
  }
  catch(Exception e)
  {
   
  }
 }
}
=================================================

결과값.

1,2,3 이 시작되고, 5초 후에 4가 실행된다.

 

 

 

 

 

 

 

'개발 > 이론' 카테고리의 다른 글

MVC 1, MVC 2 차이  (0) 2017.12.06
자바 Referenced Libraries 만들기  (0) 2013.10.08
9월 11일  (0) 2013.09.12
9월 9일  (0) 2013.09.12

오라클 REGEXP_LIKE

개발/DB 2015. 12. 16. 09:31

오라클에서 여러 개의 단어를 LIKE로 검색하기 위해서는 동적 쿼리를 사용하거나 LIKEOR로 묶어서 사용했다.  

Oracle 10g부터 정규식 함수가 추가 되었으며 그 중에서 REGEXP_LIKE 함수를 사용하여 다중 검색을 쉽게 할 수 있게 되었다.

 

검색할 단어를 파이프(|)로 연결하여 하나의 문자열로 만든 후 사용하면 된다.

 

 

 

SELECT *
   FROM TABLE
 WHERE REGEXP_LIKE(TEXT, 'A | B | C')

'개발 > DB' 카테고리의 다른 글

MySQL database, data 복사하기  (0) 2020.03.25
Clob 타입을 varchar2 타입으로  (0) 2018.02.14
ORA-00054 에러  (0) 2015.11.25
해당 컬럼이 있는 테이블 찾기  (0) 2015.09.14
테이블 정보 조회  (0) 2015.01.16

시간 지나면 자동으로 페이지 이동

개발/실전 2015. 12. 2. 15:06

페이지가 변경되어, 안내 창이 나오고 시간 지나면 자동으로 페이지 이동을 하고 싶다.

두가지 방법이 있는데

가장 쉬운 방법은

 

<meta http-equiv="refresh" content="5; url=http://hoon2kc.tistory.com/" />

 

이 한줄만 넣어주면 된다. content 의 값으로 시간을 조절 할 수 있다.

 

두번째 방법은, 화면상에 00 초 후에 페이지를 이동합니다 라는 안내 문구를 띄우고 싶을때 하는 방법이다.

 

먼저 <span id="timeString"></span>   으로 안내 문구 위치를 잡아준다.

그 다음으로,

 

 <script type="text/javascript">
 <!--
 var MOVE = function(param){
    var self=this;
    this.object = document.getElementById(param.id);
    this.time = param.time||60;      //페이지 이동 시간을 정해 준다. 여기선 1분
    this.url = param.url||'';
    this.timer = null;
    this.run = function(){
     timeString.innerHTML = this.time + '초 후 자동으로 이동 합니다.';
     this.time--;
     if(this.time < 0){
     if(this.url!=''){
     location.href = this.url;
     window.clearTimeout(this.timer);
     }
     }else{
     this.timer = window.setTimeout(
     function(){self.run();}
     ,1000
     )
     }
  };
  this.run();
  }
  window.onload = function(){
  new MOVE({id:'prt',url:'http://freetsim.freet.co.kr'}); //이동할 URL
  }
  //-->
  </script>

 

이상입니다.

ORA-00054 에러

개발/DB 2015. 11. 25. 09:39

ORA-00054: resource busy and acquire with NOWAIT specified

 

위와 같은 에러메시지가 출력되면서 해당 DML이나 DDL 명령이 안될때가 있다.

 

증산은 DML문장이나 DDL문장 실행을 하게 되면 그냥 멈춰버리는 증상이다.

 

원인은 Commit이 수행되지 않았을 경우등의 문제로 발생하는 등 원인이 다양하다.

 

어쨋든 이 증상은 해당 테이블이 바쁘게 사용중일 때 나타나는데 일명 LOCK이 걸린것이다.

 

가장 확실한 방법은 DB를 재시작하는 것이다.

 

그러나 사실 필드에서는 말도 안되는 짓이다. 서비스중인 db를 잠깐이라도 내린다는것 자체가 미친짓이라 할 수 있다.

 

허나, test용으로 만든 서버라면 db재시작도 상관없다.

 

결국은 아래와 같이 Lock을 풀어주는게 가장 적당한 방법이다.

 

1. sqlplus 오라클 접속(시스템 계정으로 접속한다. 토드로 이용해도 무관)

#sqlplus / as sysdba

 

2.SQL> select a.sid, a.serial#

            from v$session a, v$lock b, dba_objects c
            where a.sid=b.sid and
            b.id1=c.object_id and
            b.type='TM' and c.object_name='TABLE이름';

 

위 명령어를 입력하면 SID와 SERIAL NUMBER가 출력된다.

LOCK이 걸린 테이블의 SID이다.

 

3. 세션을 죽인다.

SQL> alter system kill session 'SID, SERIAL';

 

 

여기까지는 시스템계정을 알고 있는 사용자에 한해서의 해결책이다.

일반 사용자는 어떻게 할것인가???

간단하게 commit 명령어로 해결될 가능성이 높다. 이 명령어가 수행되고 나면 restore작업은 불가능하다.

SQL>commit

 

 

'개발 > DB' 카테고리의 다른 글

Clob 타입을 varchar2 타입으로  (0) 2018.02.14
오라클 REGEXP_LIKE  (0) 2015.12.16
해당 컬럼이 있는 테이블 찾기  (0) 2015.09.14
테이블 정보 조회  (0) 2015.01.16
오라클 UPDATE SELECT 문  (0) 2014.11.06

접속 기기가 PC , 모바일인지 구분하는 스크립트.

개발/실전 2015. 11. 24. 09:16

웹 개발 도중에 pc버전, 모바일 버전 두가지로 개발하는데 

자동으로 모바일로 접속하면 모바일 버전으로 이동하는 스크립트를 찾았다


<script language="Javascript">
 var uAgent = navigator.userAgent.toLowerCase();
 var mobilePhones = new Array('iphone','ipod','android','blackberry','windows ce','nokia','webos','opera mini','sonyericsson','opera mobi','iemobile');
 for(var i=0;i<mobilePhones.length;i++)
 if(uAgent.indexOf(mobilePhones[i]) != -1)
 document.location="링크될 주소";
</script>


최초 index 페이지에 넣어주면 끝~


'개발 > 실전' 카테고리의 다른 글

더보기 클릭 했을때  (0) 2016.03.30
시간 지나면 자동으로 페이지 이동  (0) 2015.12.02
도메인 자동 주소 변경  (0) 2015.08.11
하루동안 열지 않기 [쿠키]  (0) 2015.04.01
checkbox 사용  (0) 2014.10.29

해당 컬럼이 있는 테이블 찾기

개발/DB 2015. 9. 14. 18:30

SELECT A.TABLE_NAME FROM COLS A, TAB B WHERE A.COLUMN_NAME = '컬럼이름' GROUP BY TABLE_NAME

'개발 > DB' 카테고리의 다른 글

오라클 REGEXP_LIKE  (0) 2015.12.16
ORA-00054 에러  (0) 2015.11.25
테이블 정보 조회  (0) 2015.01.16
오라클 UPDATE SELECT 문  (0) 2014.11.06
오라클 단일행 함수 정리  (0) 2014.11.05

도메인 자동 주소 변경

개발/실전 2015. 8. 11. 17:24

A 도메인 주소에서 B로 변경될 상황이 있었다.

구글링 결과 아주 쉬운 방법!!

 

<script type="text/javascript">  <!--
//기본 도메인 입력
var url1 = 'A';
//2차 도메인 입력

var url2 = 'B';
var online = document.URL;
if(online.match(url1))
 document.location.href = online.replace(url1,url2);
//-->
</script>

 

이제 A의 도메인 경로로 들어와도 자동으로 B의 경로로 된다