Back to the DataBase

DAO 잡다한 실수들

Backcoder 2022. 7. 19. 22:53

1. 쿼리문 안에   컬럼변수에  '   ' 따옴표가 붙어버린다! 

쿼리문에서 "컬럼이름" 을 변수로 둘 때, 즉 

"select * from member where = 2020";

? 에 컬럼명이 오는 자리인데,
이대로 preparedStatement.set(1, id ); 
이렇게 주면 쿼리문에서는 
where ' id ' = 2020; 
즉, String이라 따옴표가 붙어서 나오면서 오류가 난다. 

그러므로, 쿼리문에서 컬럼명을 변수로 사용할려면 
쿼리문을 끊어서 변수로 해서 줘야한다. 

"select * from member where " + id + "= 2020";

////////

2. DAO 에서 insert 할 때, 
if ( != null ) 로 해서 받는데 

수정하기 전에, 비밀번호는 미리 확인을 위해 받아둔 상태라
if else 순서에서 먼저오면 무조건 값이 있는상태여서 
다 비밀번호 입력이 이루어진걸로 보기 때문에, 
이후의 else if 경우들이 적용이 안된다. 
(1) 순서를 가장 나중으로 빼서 else처럼 사용하는 방법으로 해결했다.

 

(2) public static 전역변수로 보내기  

(1)은 if 이름 not null  / 비번 not 0  /폰번 not null  /이메일 not null  /이런식으로 입력값을 구분해서 받는 방법  

=>  이걸 client 가 고를 때, 고른 값, 예를들어 "이름"  이면 이걸 public static 전역변수로 넣고, 

DAO 에서 직접 꺼내 쓰는 방법도 사용할 수 있었다. ( 테이블 해당 컬럼명으로 바꾸어서 넣어두면 쓰기 편하다 )  

마찬가지로 수정값에 대한 고객의 입력 value 값도 전역변수로 넣어서 DAO 에서 직접 꺼내 쓸 수 있었다. ) 

 

(3)가능한 경우, 매개변수로 넣어 보내는 방법도 생각! 

 

 


//////// 

3. Service 단에서 update할 때, 
비밀번호로 먼저 확인을 해야 수정을 할 수 있게 구현하려고 
앞 부분에서 id, pw 입력값을 받고 => 
update dao 에서 비밀번호 확인하는 로직은 먼저 앞부분에 넣어두면 

=> 처음 비밀번호 통과는 되지만 
=> 비밀번호를 update 할 때, dao 실행하기 전에 
먼저 [ set 새로운 비밀번호 ] 로직이 실행되기 때문에 
다시 update dao를 실행하면 앞부분의 비밀번호 검사에서 틀린 비밀번호로 인식 - 실패로 인식해버린다. 

=> 비밀번호 통과 로직을 따로 checkDAO 로 빼서 
update 서비스에서 처음 비밀번호를 확인할 때 이걸 이용해서 
틀리면 system exit 을 시키는 방법을 이용했다. 

이렇게 하면, updateDAO 에서는 비밀번호 확인과정이 없으므로 
비밀번호 업데이트를 실행하는데 문제를 피할 수 있었다. 


///////////

4. preparedstatement 에서 ? 변수에 값 넣어줄 때 

where PW = 1234;  

에서 1234 값을 묶어서 받느라 String.valueOf ( )해서 문자로 받아뒀는데 
쿼리문에 집어넣을 때는 =>  숫자를 '1234' 로 표현해도 숫자로 인식해주므로 
굳이 구분해서 넣을필요없이 같이 String 으로 넣어주면 됬다. 

//////

이것 저것 배운게 많고 배울게 많다.