난 왜 지금까지.. dml에 대해 매개변수로 do를 전달햇을때.. pk등 키값을 제대로 처리를 안햇었을까?


예를 들어..  xxDAO클래스의  int update(DO do) 메서드라면,.. (insert도 포함)


지금까지 내경운.. sql 쿼리를 "update 테이블 이름 set 칼럼1 = do.칼럼1, 칼럼2 = do.칼럼2

요렇게 했었는데.. 난 바보였다.. 요런 쿼리면.. 모든 로우에 대해 해당 값으로 덮어쓰게 된다.


이런 메서드는 updateAll() 이런 식으로 명명했어야 했다.


update() 라면..

update 테이블 이름 set 칼럼1(pk아님) = do.칼럼1, 칼럼2 = do.칼럼2 ... where 테이블 칼럼.pk = do.pk 

요렇게 했어야 했다... 


난 뭘한건가?????????????????????


오버 로딩으로 중복 코드 줄이겠다는 마음만 앞서서.. (쿼리 구문 ? 에 입력값들 매핑 하는 로직)

update, 와 select를 묶어버리고;; (이것도 위의 삽질처럼.. updateAll과 update 구분못함.. 물론 delete , deleteAll 도 구분 못함)

insert와 delete를 묶었을거다;; 


난 진짜 바보다;;;


db의 테이블.. 그리고 pk.. where 조건절과 서비스 메서드의 조건(selectById...) 구분을 못했었다. 


dml이 왜 dml이냐!!!!! dql 왜 dql이냐??? 왜 두가지 문장이 구분되는 것인지..  좀 깨닫자!!!!!!

select란 dql은 ... 전체 집합에서 조건을 찾는 문법이다.;;; 아.. 그래도 늦게나마 깨달았다;;;

by givingsheart 2014. 1. 7. 14:50

아하하..


표준 콘솔 출력도 내가 포장해서 쓰려다가.. 
내가 만들라던 PrintWriter 객체나, System.out 이란 객체나.. 똑같은 넘들인것을..

그러니 만들어 질리가 없고.. 작동 할리도 없지.. 생각이 짧았음.
(단순한 실수였는데 문제를 빠르게 풀지 못했었음)


by givingsheart 2014. 1. 1. 16:41

일단 가정하는 것이.. core api들이 제공하는 클래스,메서드 등은 뻑날 확률이 거의 없다.


한마디로 내가 만든 클래스,메서드에 오류가 있을 확률이 99.9%..

이클립스 콘솔창에 콜 스택의 상태가 전부 뿌려지는데..

이중 core api가 제공한 메서드는 가볍게 무시해주고.. 내가 만든 클래스의 메서드를 찾아서
해당 라인을 찾아보자~ (분명 예전에도 수업때 지적해주신것 같은데.. 이제 와서 깨우침 OTL)


by givingsheart 2014. 1. 1. 16:08

put이라는 메서드의 도큐먼트 설명을 제대로 보지 않고,


단순하게 map이 중복을 허용하지 않기 때문에 put해도 중복된 키는 덮어쓰지 않고
튕겨 낼것이라 판단했다.

그리하여 map에 객체를 넣는데 있어..
isContainsKey() 메서드를 사용하지 않고 바로 put을 사용했다.

지금 확인해본 결과 put 메서드는 중복된 키값이 존재하면 덮어쓰고, 기존 키,오브젝트를
반환한다는 것을 알게 되었다. (나는 set의 add()처럼 저장을 거부할줄로만 알았다)

map자료구조에 add,remove는 있지만, 왜 set(update용 인터페이스)가 존재하지 않는
지를 생각해야한다. 또한 덮어쓰기(update)의 개념이 왜 필요한지도 생각해야한다.
키값은 동일하게 유지하되, 값을 변경하고 싶은 경우가 있을수 있다. (셋은 단일 원소(오브젝트)
의 집합(동일타입) vs 맵은 단일원소의 집합이 아니다.)
 
set에는 add(),remove()가 필요하고, map의 경우엔 put(add() + set()) ,remove가
필요한 것이다. 


똑똑한 개발자 분들이.. MAP, SET 자료 구조를 별도로 구현한 것은, 각각의 역할과 특성이 다르기 때문이다.
SET 은 영어 그대로 집합 = 중복 요소 금지 하는 자료구조이다.
MAP 은 데이터의 보관->검색(활용)시 이점을 두기 위해 KEY,VALUE로 묶은 요소를 KEY의 중복없이(VALUE중복 가능)
관리하는 자료구조이다.

배열도, 연결 리스트도,큐,스택, 트리등등.. 각각의 역할및 장,단점과 사용해야할 곳, 쓰지 말아야 할곳이 존재한다.
(게임 프로그래밍 할때.. 맵을 관리하기 위해 4진 트리 (좌상,좌하,우상,우하)로 맵을 잘라서, 그것을 프랙탈 처럼 반복하는 구조를 사용했었다. 상기하자.. 자료구조를 사용하면, 특정 문제를 쉽게 관리할 수 있다.)

=> 자만하지 말것. 어설프게 알지 말것! api 도큐먼트 보고 메서드의 동작을 확실하게 
확인후 사용할것!


by givingsheart 2014. 1. 1. 15:45

애초엔 구현만 시키자고 만들다가..(svn으로 프로젝트 생성도 안함) 

 

기왕 만들거 내가 공부한것들 적용시켜보자는 욕심에

 

계속 만들고 부수고 하면서 설계를 계속 바꾸다가.. 버전 관리가 안됐다.

 

내 생각의 변화, 고민들.. (enumerte 역시 처음엔 c/c++ 처럼 접근을 했는데.. 실제 사용하다

보니까 클래스 였다) 

(ex) ConfigData.DB_INFO_INDEX.DB_LOGIN_ID.ordinal();   <--요렇게 사용했었음;;

 

계속 같은 소스 파일에서 뒤집어 엎어버리다 보니까 ... 분실했다 ㅠㅠ

 

=>배운점: 간단한 프로그램이라도 svn을 통해 버전 관리를 할것!!!!



(추가)

현재 svn -> 내 로컬에 저장소 만들고 (visual 어쩌고) -> 이클립스에서 커밋,체크아웃 하고있다. 요거.. 익숙해 져야 한다.


(추가)

git를 공부했다. 연동이 안된다. gitHub .. 클라우드상 저장소로.. 요걸 사용하면 좋을듯 하다.

by givingsheart 2014. 1. 1. 15:43
| 1 |