IT감각

[java] String[] ArrayList Arrays.deepEquals Arrays.toString 차이점 용도 구별 활용 oracle string[] db 저장 JSON 입력

dobioi 2023. 5. 23. 17:34
반응형

배열을 한 컬럼에 저장할 일이 그리 많지 않지만,

언제나 예외 상황은 있다고 보고,

나름 정리를 해본다.

 

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());

 

겨우 문제를 해결하고, 기록 삼아 남겨둔다.

쉽지 않지만, 재밌다.

 

 

300x250

3.ArrayList<> 비교는 잘 된다.

 

if (rtnSelVo.getPhoneNoList().compareTo(input.getPhoneNoList() != 0) errCnt++;

 

비교는 쉽지 않다. 편하게 생각하면 간단한데, 제대로 하려면 신경 좀 써야 하는 것 같다.