반응형

예외

1. 일반예외(Exception) : 컴파일러 체크 예외, 자바 소스를 컴파일하는 과정에서 예외 처리 코드가 필요한지 검사함

2. 실행예외(Runtime Exception) : 컴파일하는 과정에서 예외 처리 코드를 검사하지 않음

컴파일 시 예외 처리 확인 여부만 차이가 있고, 모두 예외 처리가 필요함.

모든 예외 클래스들은 java.lang.Exception 클래스를 상속받음.


실행예외(java.lang.RuntimeException 상속)

1. NullPointerException

객체가 없는 상태에서 객체를 사용하려 하면 발생하는 예외

Null인데 참조하면 발생

 

2. ArrayIndexOutOfBoundsException

배열에서 인덱스 범위를  초과하여 사용할 경우 발생

 

3. NumberFormatException

문자를 숫자로 변환할 때 숫자로 변환될 수 있는 문자가 포함되어 있는 경우 발생

Interger.parseInt("a100"); 이런경우 발생

 

4. ClassCastException

억지로 타입변환을 시도할경우 발생

타입 변환 전에 (변환할객체 instanceof 목표객체) 를 사용해서 타입 변환 가능한지 확인~!(결과값 : true/false)


catch 순서

다중 catch블록 작성시 상위 예외 클래스가 하위 예외 클래스보다 아래쪽에 위치해야 함

Exception 클래스는 맨 마지막으로..

 


 

멀티 catch

하나의 catch 블록에서 여러개의 예외를 처리하는 법 

catch 괄호 ()안에서 | 로 연결하면 된다는데

왜 에러가 나지? ㅡ ㅡ

-> 같은 패키지 안에 ArrayIndexOutOfBoundsException이라는 클래스파일을 만들었어서 그랬다... ㅠ ㅠ 


예외 발생시키기 (throw)


예외 떠넘기기 (throws)

  • throws : 메소드 선언부 끝에 작성되어 메소드에서 처리하지 않은 예외를 호출한 곳으로 떠넘김 
  • throws 키워드가 붙은 메소드는 반드시 try 블록 내에서 호출되어야 함.
  • main 메소드에서 throws 사용시 JVM이 최종적으로 예외의 내용을 콘솔에 출력하는 것으로 예외 처리를 한다.
public void method1() throws Exception{
 
}

자동 리소스 닫기(try with resources)

예외 발생 여부와 상관없이 사용했던 리소스 객체의 close() 메소드를 호출해서 리소스를 닫아준다.

  • 조건 : 리소스 객체는 java.lang.QutoCloseable 인터페이스를 구현하고 있어야 함
  • AutoCloseable의 close() 메소드가 자동호출되는거임

AutoCloseable 인터페이스 구현

객체 생성은 다음과 같이~


사용자 정의 예외 클래스

  • 일반예외로 선언할 경우 Exception 상속, 실행예외로 선언할 경우 RuntimeException 상속
  • 생성자는 두 개를 선언하는 것이 일반적 

 


예외 정보 얻기 

  • getMessage() : 예외 발생 시 메시지를 갖는 생성자를 이용한 경우 메세지를 얻어올 수 있음
} catch(Exception e) {
	String message = e.getMessage();
}
  • printStackTrace() : 예외 발생 코드를 추적해서 콘솔에 출력
반응형
반응형

페이지 이동시마다 적절하게 알림창이 뜨는 로직이 뭔지 알아보다가..

Spring Boot의 Interceptor를 이용하여 특정 url 진입 시에 특정 작업을 수행하도록 설정할 수 있다는 것..

모든 내용은 아래를 참고하였음..

elfinlas.github.io/2017/12/28/SpringBootInterceptor/

 

Spring Boot에서 Interceptor 사용하기

인터셉터?Spring 또는 Spring Boot 프레임워크로 웹 어플리케이션을 개발하다 보면 아래와 같은 요구사항이 생기게 됩니다. 특정 url 진입 시 로그인이 된(인가된) 사용자가 접근을 해야 함 특정 url 진

elfinlas.github.io

 

내가 작업한 프로젝트 기준으로 작성해보자면

1. HandlerInterceptorAdapter를 상속

이 클래스에 prehandle, posthandle, aftercomplete가 선언되어 있음

preHandle 메소드에 컨트롤러 실행 직전에 실행될 동작이 있음

내 프로젝트에서는 쿠키를 검사해서 알림창을 띄우고 로그인으로 보낸다든지.. 페이지에 대한 권한을 검사한다든지 하는 동작이 있음.

 

2. WebMvcConfigurer 를 상속

addInterceptors 메소드를 구현함

addInterceptor : 등록할 인터셉터 설정

addPathPatterns : 적용할 url 패턴 설정

excludePathPatterns : 인터셉터를 제외할 url 패턴 등록 

 

반응형
반응형

document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT;';

이렇게 삭제하면 된다는데 아무리해도 삭제가 안되고

value가 공백인 쿠키가 자꾸 새로 생기는거...

현재 페이지의 쿠키는 다음과 같았음(보안상 가림)

Name이 A고

Value가 B고

Domain이 C.kr

Path가 / 인 쿠키가 있다고 치면

document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT;domain=C.kr;path=/;';

해서 도메인과 path까지 적어줘서 해당 쿠키를 세팅해야 했던것....

흑흑 해결.

반응형
반응형

Mapped Statements collection already contains value for...

머 대충 이런 에러가 났는데

쿼리 id가 중복되어서 그랬던거 같음

같은 id 를 가진 쿼리문 하나 지우니까 됨.

아래 내용은 아래 링크에서 가져온 것.

* 원인 

 1. mapper id 가 틀린 경우.

 2. Parameter와 bean의 field 명이 틀린 경우

 3. sql.xml 에서 정의된 namespace와 DAO에서 호출하는 namespace가 다를 경우

 4. mapper가 정의가 되어 있지 않거나 Spelling 이 틀린 경우

 5. mapper에 정의 된 namespace 명칭이 같은 Application 내에 중복 될 경우

아래 링크를 참고하였음

 

starlmh.tistory.com/entry/Mybatis-%EC%97%90%EB%9F%AC

 

Mybatis 에러

* 에러 문구 : Mapped Statements collection already contains value for ~ * 원인  1. mapper id 가 틀린 경우.  2. Parameter와 bean의 field 명이 틀린 경우  3. sql.xml 에서 정의된 namespace와 DAO에서..

starlmh.tistory.com

 

반응형
반응형

DB 컬럼명 <-> VO 변수명 DB 컬럼명이 AB_CD,VO 변수명이 abCd인 경우언더바와 camel case 자동매핑하기위해

mybatis-config.xml에 다음 내용 추가

<settings>

<setting name="mapUnderscoreToCamelCase" value="true" />

</settings>

 

반응형
반응형

MyBatis 에러

java.sql.SQLSyntaxErrorException: ORA-00911: invalid character

응 유효하지 않은 문자~

에러난 쿼리 뒤에 ; 빼야지.. 큼큼..

반응형
반응형

ERROR jdbc.sqltiming - 1. PreparedStatement.execute() FAILED! select equi_type, avg(equi_cnt), sum(data_cnt), sum(normal_data_cnt) normal_data_cnt from (select equi_type, equi_cnt, data_cnt, equi_cnt*((select to_char(sysdate,'hh24') from dual)*30+'15') normal_data_cnt from tb_st_daily_sen where tm8=(select to_char(sysdate,'yyyymmdd') from dual)

{FAILED after 14 msec}

java.sql.SQLSyntaxErrorException: ORA-00907: missing right parenthesis

* parenthesis : 괄호 

쿼리문의 괄호 짝이 안맞는거였음... 빠진 괄호를 넣어주자... )))))

반응형
반응형

 

-- 어제 날짜 구하기
select to_char(sysdate-1,'yyyymmdd') from dual; 
-- 특정일 전날 날짜 구하기
select to_char((to_date('20210112','yyyymmdd'))-1, 'yyyymmdd') from dual; 
-- 시각 구하기(24시 표시 버전)
select to_char(sysdate,'hh24') from dual; 
-- 시각 구하기
select to_char(sysdate,'hh') from dual; 
-- 분 구하기
select to_char(sysdate,'mi') from dual; 
-- 초 구하기
select to_char(sysdate,'ss') from dual;
반응형
반응형

명령문 실행하려고 ctrl+enter 누르다가 잘못 눌러서 접속창 없어진거 원데이 투데이...

ctrl+shift+enter을 다시 눌러주면 생긴다 ㅠ ㅠ 

반응형
반응형

 

대충 이렇게 생긴 테이블이다...

<tr>
	<td><input type="checkbox"></td>
 	<td><input type="text" value="111"></td>
	<td><input type="text" value="222"></td>
<tr>

<tr>
	<td><input type="checkbox"></td>
 	<td><input type="text" value="333"></td>
	<td><input type="text" value="444"></td>
<tr>

 

checkbox가 체크된 tr의 자식인 td들의 input value들을 다 선택하는 방법..

 

* table tr index는 0부터 시작한다

* td index도 0부터 시작한다

* 원하는 행부터 checkbox가 checked 인지 검사

* checked된 행을 찾으면 그 안의 input[type=text]인 자식을 다 찾는다..

* find()로 찾은 자식들은 앞에부터 eq(0)으로 찾으면 된다. ㅎㅎㅎㅎ

 

var data[]; //data배열 생성

for(var i=2; i <$('table tr').size(); i++){
	if($('table tr').eq(i).children().find('input[type="checkbox"]').is(':checked')){
        
	var setData={}; //배열에 넣을 데이터쌍 변수 생성
    
	setData['aa'] = $('table tr').eq(i).find('input[type="text"]').eq(0).val();
	setData['bb'] = $('table tr').eq(i).find('input[type="text"]').eq(1).val();
    
	data.push(setData);
    
    }
}

 

setData를 for문 밖에 생성하게 되면

매번 다른 tr의 td값들이 덮어씌워진다. 결국 한 행의 td값들만 들어가게 됨. ㅠ ㅠ 

콘솔에서 찍어보니 data는 이렇게 생긴거같다

data : [ { aa : "111" , bb : "222" } ], [ { aa : "333" , bb : "444"} ] 

 

반응형

+ Recent posts