[java] String[] ArrayList Arrays.deepEquals Arrays.toString 차이점 용도 구별 활용 oracle string[] db 저장 JSON 입력
배열을 한 컬럼에 저장할 일이 그리 많지 않지만,
언제나 예외 상황은 있다고 보고,
나름 정리를 해본다.
1.2개 이상의 전화번호를 String[]으로 받아서 DB에 넣어본다.
2.DB 컬럼값과 input 값을 비교한다.
3.ArrayList<> 비교는 잘 된다.
1.2개 이상의 전화번호를 String[]으로 받아서 DB에 넣어본다.
JSON ------
"phoneNo" : ["01012341234","01043214321"]
VO ----
Private String[] phoneNo;
JAVA ----
insertVo.setPhoneNo(Arrays.toString(phoneNo);
2.DB 컬럼값과 input 값을 비교한다.
if (rtnSelVo.getPhoneNo().compareTo(inputVo.getPhoneNo()) != 0) errCnt++;
이렇게 하면 제대로 비교가 안된다.
왜냐하면 db에 저장된 내용이 좀 다르기 때문이다.
DB -----
PHONE_NO
---------------------
[01012341234, 01043214321]
String rslt = rtnSelVo.getPhoneNo().replace("[","");
rslt = rslt.replace("]","");
rslt = rslt.replace(" ","");
String[] res = rslt.split(",");
if ( ! Arrays.deepEquals( res, inputVo.getPhoneNo() ) ) errCnt++;
이렇게 해야 제대로 비교가 된다.
==> 배열 비교는 쉽지 않다. 정상적인 상황은 문제가 되지 않지만, 꼭 예외상황이 발생될 수 있어서 데이터에 대한 정합성을 확인해봐야 하는 경우가 생기는 것 같다.
위 박스에 있는 내용은 입력되는 값이 있을 경우에는 문제가 없지만 1개는 있지만, 다른 쪽에는 값을 넣지 않는 경우도 있다. 그렇게 되면 배열을 만드는 과정에서 제대로 비교되지 않을 수 있는 상황을 발견했다.
해결 방법은 위 박스 내용 중 다음과 같이 일부만 수정하면 된다. rtnSelVo.getPhoneNo().lenth()는 배열의 크기를 결정하는 역할을 하게 되어, 빈 배열을 확보하게 된다.
String[] res = rslt.split(",", rtnSelVo.getPhoneNo().lenth());
겨우 문제를 해결하고, 기록 삼아 남겨둔다.
쉽지 않지만, 재밌다.
3.ArrayList<> 비교는 잘 된다.
if (rtnSelVo.getPhoneNoList().compareTo(input.getPhoneNoList() != 0) errCnt++;
비교는 쉽지 않다. 편하게 생각하면 간단한데, 제대로 하려면 신경 좀 써야 하는 것 같다.
댓글 영역