DAO 잡다한 실수들
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 으로 넣어주면 됬다.
//////
이것 저것 배운게 많고 배울게 많다.