반응형

JAVA

*int형 자릿수 구하기

Math.log10(num)+1 // int num = 숫자


*2차원 배열의 길이 구하기

int array = int[x][y];

array.length // x의 길이

array[y].length // y의 길이


*제곱함수

Math.pow(x,y); // x = 밑, y = 지수 ex) x^y // x의 y승


반응형
반응형

java(자바) - 정확한 숫자계산 할때 사용하는 빅데시멀(BigDecimal) 정리(형변환,선언,사칙연산)


자바에서 숫자값 계산을 할때 int, double등등을 사용하면 소숫점 값이 오차를 보이는데

오차를 만들지 않게 정확한 계산을 할때 사용합니다.



*선언

BigDecimal 변수명 = new BigDecimal(String숫자값);

BigDecimal num1 = new BigDecimal("1000.55");

BigDecimal num2 = new BigDecimal("0.5");


*사칙연산

num1.add(num2);   //덧셈 num1 + num2

num1.subtract(num2); //뺄셈 num1 - num2

num1.multply(num2);  //곱셈 num1 * num2

num1.multiply(num2);  //나눗셈 num1 / num2


*나눗셈 소수점처리

num1.divide(bdcl2 , 2(소수점자리수), BigDecimal.ROUND_UP); //올림

num1.divide(bdcl2 , 4, BigDecimal.ROUND_DOWN); //버림

num1.divide(bdcl2 , 3, BigDecimal.ROUND_HALF_UP); //반올림

num1.divide(bdcl2 , 1, BigDecimal.ROUND_HALF_DOWN); //반내림


*비교

num1.compareTo(num2);

//num1이 작으면 1 로 return

//num1이 같으면 0 로 return

//num1이 더크면 1 로 return


*소수점 처리

num1.setScale(소수점자릿수, BigDecimal.ROUND_UP)); //올림

num1.setScale(1, BigDecimal.ROUND_UP)); //올림


*타입변환

//빅데시멀(BigDecimal) -> 스트링(String)

num1.toPlainString();


//빅데시멀(BigDecimal) -> int/float/long 등

num1.intValue();

num1.floatValue();

num1.longValue();


반응형
반응형


에러 ( ORA-06550 )

ORA-06550: 줄 1, 열7:PLS-00201: 'PROC_INPUT_DATA' 식별자가 정의되어야 합니다

ORA-06550: 줄 1, 열7:PL/SQL: Statement ignored


-> 프로시저가 없는경우프로시저가 있는데 권한이 없는경우이 에러가 나옵니다.


해당 프로시저가 없을경우는 생성해주고, 

그 외에는    

문자열 오타를 확인하거나 오라클쪽에서 계정권한을 확인하시면 될것 같습니다.


반응형
반응형

java - 지정날짜의 월차이 차이 구하기 / 정확한 개월수 차이 구하기 / 날짜 차이 구하기 / 날짜 개월수 구하기

찾다가 오늘날짜에서의 개월수 차이 구하는 거밖에 안나와서 대충 만들었습니다.

부족하지만 필요하면 갖다쓰세요...


*윤년 계산법 = 현재년도 / 400  ( 나머지값이 0이면 29일 그외는 28일 )

*각 개월수별 범위

-3개월 89~92일

-6개월 181~184일

-12개월 365~366일


//시작

try {

String startDate = "20180101"; //시작날짜

String endDate = "20180301";  //마지막 날짜


// YYYY-MM-DD 로 만들기위해서 지우고 다시 생성해줌

startDate = startDate.replaceAll("-", "");

endDate = endDate.replaceAll("-", "");

String sd1 = startDate.substring(0, 4);

String sd2 = startDate.substring(4, 6);

String sd3 = startDate.substring(6, 8);

String ed1 = endDate.substring(0, 4);

String ed2 = endDate.substring(4, 6);

String ed3 = endDate.substring(6, 8);

startDate = sd1+"-"+sd2+"-"+sd3;

endDate = ed1+"-"+ed2+"-"+ed3;

 

// 날짜를 data타입으로 변경

SimpleDateFormat fm = new SimpleDateFormat("yyyy-MM-dd");

Date sDate = fm.parse(startDate);

Date eDate = fm.parse(endDate);

// 시간차이를 시간,분,초를 곱한 값으로 나누면 하루 단위가 나옴

long diff = eDate.getTime() - sDate.getTime();

        long diffDays = diff / (24 * 60 * 60 * 1000) ;

 

        long difMonth = (diffDays+1)/30; //총개월수 ( 대략 30으로 나눴을때 나오는 개월수 )

        long chkNum = 0; 

        

        int j=0;

        

        //개월수 체크 ( 시작한날짜월부터 위에서 대충 계산한 개월수까지 )

    //각 월별로 해당하는 월수에 맞게 더해줌

        for(int i=Integer.parseInt(sd2); j<difMonth; i++) {

        if(i==1 || i==3 || i==5 || i==7 || i==8 || i==10 || i==12 ) {

        chkNum += 31;

        }else if(i==4 || i==6 || i==9 || i==11 ) {

        chkNum += 30;

        }

        if(i==2) {

        //윤달체크

        if( ((Integer.parseInt(sd2))%400) == 0 ) {

        chkNum+=29;

        } else {

        chkNum+=28;

        }

        }

        j++;

 if(i>12) { i=1; j=j-1;}

        }

        long allMonth = (chkNum+1)/30; //진짜 총개월수

        if(diffDays < chkNum) { 

        allMonth = allMonth-1; // 대충 구한개월수는 더많을수 있어서 1빼줘서 진짜 개월수를 구함

        }


    System.out.println("날짜차이 =" + diffDays);

    System.out.println("총 차이  =" + chkNum); //실제 차이나야하는 총일수

    System.out.println("개월수 =" + difMonth);

    System.out.println("진짜개월수 =" + allMonth);

        

} catch (Exception e) {}


감사합니다

sysout으로 찍어놔서 확인해보시고 오류있으시면 댓글달아주세여..

제가확인할때는 괜찮았습니다.

반응형
반응형

controller 동적으로 url mapping하기 - 동적 주소 매핑


cotroller에서 RequestMapping을 사용해서 url을 매핑 시켜주는데

주소만 다르고 기본적인 컨트롤러가 같은경우나

여러가지 화면을 동적으로 매핑시켜주고 싶을때

많은 화면을 컨트롤러 리퀘스트매핑을 한개로 사용하고 싶을때

동적으로 주소를 매핑하면 편하고, 소스도 간결하게 줄일 수 있습니다.


딱히 어렵지도 않습니다.

그냥 ReauestMapping에 주소 경로 설정해줄때 {id값} 으로 설정해주고

@PathVariable("id값") 받고싶은형태 변수명  이렇게 입력해주시면 끝입니다.

아래 예제로 보시면.

 

@Controller

@RequestMapping(value = "/hompage")

public class MainController {


@RequestMapping(value = "/main/{urlid}")

 public ModelAndView intro( @PathVariable("urlid") String urlid

        HttpServletRequest request,

        HttpServletResponse response, 

        Model model

         ) throws Exception{

    

      return new ModelAndView("/main/"+urlid);

 }

 


}


위에는 일단 클래스에 /hompage/main/~.do 로 들어오는 url은 다 저걸 탑니다.

~에 들어오는 값들이 @PathVariable("urlid") String urlid 에서 보는 것처럼

String의 변수 urlid 값이 들어갑니다.


그래서 return을 해줄때 jsp파일명이 같다면 위와같이 경로를 잡아주고 urlid 를 사용하면 편합니다.

한두개만 성격이 다른화면이면

switch문이나 if문을 사용해서 해당 url에 맞게 수정해주면 될것 같습니다.


화면이 적은곳에서는 그냥해도 상관없는데 비슷한 류의 화면이 많은경우 사용하면 아주 편합니다!


반응형
반응형

HTML5에서 제공하는 WebStorage인 로컬스토리지와 세션에 대해서 간단히 알아보겠습니다.

*WebStorage - 데이터를 클라이언트에 저장


localStorage 

- 직접 지우지 않으면 만료기간이 없음

- 도메인마다 별도로 로컬스토리지 생성


sessionStorage

- 세션이 끝나면 종료

- 브라우저 종료시 세션종료

- 브라우저가 다르면 서로 다른영역

- 도메인마다 별도로 세션스토리지 생성


---------------------------------------------------------

(JavaScript)


localStorage 사용 방법


//로컬스토리지 저장

localStorage.loginId = value;

localStorage.setItem("key", value);


//특정 로컬스토리지 불러오기

localStorage.loginId;

localStorage.getItem("key");


//전체 로컬스토리지 데이터 불러오기

localStorage.getItem(); 


//특정 로컬스토리지 삭제

localStorage.removeItem("key");


//로컬스토리지 전체 삭제

localStorage.clear();



sessionStorage 사용 방법


//세션 저장

sessionStorage.setItem("key", value);


//특정 세션 값 불러오기

sessionStorage.getItem("key");


//특정세션 삭제

sessionStorage.removeItem("key");


//세션 전체 삭제

sessionStorage.clear();



---------------------------------------------------------

(Java)


sessionStorage 사용 방법


public String intro( HttpServletRequest req, HttpServletResponse res){

//세션 생성

req.getSession().setAttribute("key", value);

//세션 값 반환

req.getSession().getAttribute("key");

//세션 값 반환 없으면 세션생성

req.getSession();

req.getSession(true); // 위에꺼와 같음

//세션 값 반환 없으면 null 반환

req.getSession(true); 

}


public void filter(ServletRequest req, SercletResponse res){

HttpSession session = request.getSession();

}


// 세션종료 모두삭제

session.invalidate(); 


// Key인 세션 제거

session.removeAttribute("key"); 


// 세션 속성의 이름들을 Enumeration 객체 타입으로 리턴

session.getAttributeNames();  


// 1970년 1월 1일 0시 0초를 기준으로 하여 현재 세션이 생성된 시간까지 경과한 시간을 계산하여 1/1000초 값으로 리턴

session.getCreationTime();



반응형
반응형

*자료구조란

- 자료의 집합

- 각 원소들이 논리적으로 정의된 규칙에 의해 나열되며, 

  자료에 대한 처리를 효율적으로 수행할 수 있도록 자료를 구분하여 표현한 것



*객체지향이란

- 자료구조와 이를 중심으로 한 모듈먼저 설계하고 실행순서 흐름을 짜는형식

- 여러 개의 객체 단위로 나눠 작업하는 방식

- 모듈 재사용 / 확장 및 유지보수 용이 / 생산성향상

- JAVA, C#

- 3대특성

  1.캡슐화 - 관련 데이터와 알고리즘이 하나의 묶음의로 정리

  2.상속 - 작성된 코드를 이어받아 새로운 클래스를 생성. 기존코드 재활용

  3.다형성



*절차지향이란

- 프로그램의 순서와 흐름을 먼저세우고 필요한 자료구조와 함수를 설계

  코딩방식 절차적(순서적)

- 여러 함수로 나누어 순차적으로 처리하는 방식



*소프트웨어 공학 개념

-질 좋은 소프트웨어를 경제적으로 생산하기 위하여, 

 공학, 과학 및 수학적 원리와 방법을 적용하는 것

1. 프로젝트 계획

2. 요구사항 정의 문서화

3. 설계

4. 구현

5. 시험



*MVC ( 모델 뷰 컨트롤러 )

 사용자 Controller를 조작 -> Controller는 Model을 통해서 데이터를 가져옴 

-> 그 정보를 바탕으로 시각적인 표현을 담당하는 View를 제어해서 사용자 전달 



*프레임워크란

 - 확장 가능한 기반 코드와 필요한 라이브러리 두요소 통합제공

 - 기본설계나 필요한 라이브러리를 제공

 - 빠른시간에 완성 유지보수할수있는 환경제공해주는 솔루션



*아키텍처란

 -아키텍쳐는 전체 시스템에 대한 구조를 정의한 문서로, 

  시스템을 구성하는 컴포넌트와, 그 컴포넌트간의 관계, 그리고, 컴포넌트가 다루는 정보(데이타)를 정의함



*WAS

 -JSP, ASP, PHP등 서비스스크립트들을 처리할수 있는 WAS

반응형
반응형

오라클에서 데이터를 한줄로 가져오는 예제와 LISTAGG 한글 깨짐현상에 대해서 포스팅하겠습니다.


여러행을 한줄로 구분자를 줘서 하나의 컬럼으로 가져오는 예제로 LISTAGG 함수를 사용합니다.



*사용예제는 아래와 같이 사용하시면 되고, 기호에 맞게 변경하셔서 쓰시면 됩니다. 



SELECT 

    LISTAGG(컬럼, 구분자) WITHIN GROUP (ORDER BY 정렬할 컬럼) AS 바꿀 컬럼명 

 FROM 

    테이블 

WHERE 

    조건문




*아래는 예제를 위한 예제테이블을 만들었습니다.



SELECT 

    * 

FROM 

    (

        select 'A' as 영어, '1' as 정보 from dual

        union all

        select 'B' as 영어, '2' as 정보 from dual

        union all

        select 'C' as 영어, '1' as 정보 from dual

        union all

        select 'D' as 영어, '1' as 정보 from dual

    )



결과는 아래와 같습니다.







*이제 위 테이블을 가지고 데이터를 한줄로 가져오겠습니다.

 - 영어컬럼을 한줄로 가져올 예정입니다.

 - 정보가 1인 것을 조건으로 주겠습니다.

 - 구분자는 , (콤마) 로 사용하겠습니다.


SELECT 

    LISTAGG(a.영어, ',') WITHIN GROUP (ORDER BY a.영어) AS 영어정보

 FROM 

      (

        select 'A' as 영어, '1' as 정보 from dual

        union all

        select 'B' as 영어, '2' as 정보 from dual

        union all

        select 'C' as 영어, '1' as 정보 from dual

        union all

        select 'D' as 영어, '1' as 정보 from dual

    ) a

WHERE 정보 = '1'



위의 쿼리를 실행하면 아래와 같이

 - 조건인 정보가 '1'인 영어 컬럼의 데이터를 한줄로 뽑아냈습니다.



------------------------------------------------------------------------------------------------------


LISTAGG 한글 깨짐현상


LISTAGG를 사용해서 컬럼을 가져왔는데 한글이깨지는 경우는 컬럼 타입이 NVARCHAR 일 경우 그러는 것 같습니다.

NVARCHAR 타입을 VARCHAR로 데이터 타입 변환 함수인 CAST를 사용하여 변환해주세요.


CAST ( 컬럼 AS VARCHAR(50) ) AS 컬럼명


위와 같은 형식으로 사용하면 됩니다.


------------------------------------------------------------------------------------------------------


오라클에서 데이터를 한줄로 가져오기 및 LISTAGG 한글 깨짐현상에 대해 알아봤습니다.


감사합니다.








반응형
반응형

JAVA - 클라이언트 아이피 확인


public String getClientIp(HttpServletRequest request) throws Exception {


String ip = request.getHeader("X-Forwarded-For");

LOGGER.info("X-FORWARDED-FOR : " + ip);

    

String ip2 = request.getHeader("Proxy-Client-IP");

LOGGER.info("Proxy-Client-IP : " + ip2);


String ip3 = request.getHeader("WL-Proxy-Client-IP");

LOGGER.info("WL-Proxy-Client-IP : " + ip3);


String ip4 = request.getHeader("HTTP_CLIENT_IP");

LOGGER.info("HTTP_CLIENT_IP : " + ip4);


String ip5 = request.getHeader("HTTP_X_FORWARDED_FOR");

LOGGER.info("HTTP_X_FORWARDED_FOR : " + ip5);


String ip6 = request.getRemoteAddr();

LOGGER.info("Result : IP Address : "+ip6);


return ip6;

}

   

반응형
반응형

js/jquery - selectBox controller ( 셀렉트박스 제어 )




selectBox option selected  ( 셀렉스박스 옵션 선택 ) 


// #id인 selectBox에서

// selectBox의 value 값이 menu1 인 값 선택

$("#id").val("menu1").prop("selected", true); 


// #id인 selectBox에서

// selectBox의 첫번째 옵션 값 선택

$("#id option:eq(0)").prop("selected", true); 





selectBox option append ( 셀렉트박스 옵션추가 )


$("#id").append("<option value='menu1'>Pizza</option>");






selectBox option replace ( 셀렉트박스 옵션변경 )


$("#id option:eq(1)").replaceWith("<option value='menu2'>Hotdog</option>");




selectBox option remove ( 셀렉트박스 옵션제거 )


$("#id option:eq(0)").remove();

 

// 셀렉트박스 처음/마지막 option 삭제

$("#id option:first").remove();


$("#id option:last").remove();




selectBox selected option text /value / index ( 셀렉트박스 선택된 옵션의 text / value / index )


$("#id option:selected").text();


$("#id option:selected").val();

 

$("#id option").index($("#id option:selected"));

 



selectBox option size ( 셀렉트 박스 옵션 갯수)


$("#id option").size();

 

// 선택된 옵션 이전/이후의 옵션 갯수

$("#id  option:selected").prevAll().size();


$("#id option:selected").nextAll().size();

반응형

+ Recent posts