아빠아버지
523
2019-05-14 22:01:14 작성 2019-05-14 22:02:49 수정됨
1
111

배열로 가져온 값으로 DB에 있는 자료를 삭제하는 방법 문의드립니다.ㅠㅠ


1. jsp 단에서 (input type="file" name="file") 의 값들을 배열로 컨트롤러단에 넘겨줬습니다.

List<Integer> file_old_no


2. 컨트롤러단에서 dto로 받아서 serviceImpl까지 가서 로직을 수행합니다.

3. 아래와 같이 DB에서 파일 정보를 가져옵니다.

List<FileDTO> fileDTO = boardDAO.view(dto.getBo_no());

4. serviceImpl에서 반복문을 돌면서 jsp단에서 가져온 file 값(배열값)들을 가져와서 아래와 같이 반복문을 돌면서 DB에서 해당 자료를 삭제를 할려고 하는데 삭제가 안됩니다.ㅠㅠ

for(int i = 0; i < fileDTO.size(); i++) {
....로직수행
}


5. DB 정보는 아래와 같이 첩부파일 테이블을 별도로 만들었습니다.

-----------+---------+---------------------------------------------------------------------+
| bo_seq | file_no | file_origin_name                                                      |
+-----------+---------+--------------------------------------------------------------------+
|         8 |       1 | 스크린샷 2018-03-23 오후 11.53.22.png                                 |
|         8 |       2 | 기술이력서.doc                                                       |
|         8 |       3 | 개인정보재동의관련쿼리.txt                                               |
|         8 |       4 | 스크린샷 2018-03-24 오전 12.08.56.png                                 |
|         8 |       5 | 개인정보재동의.txt                                                    |
|         8 |       6 | 스크린샷 2018-03-24 오전 12.10.14.png                                |
+-----------+---------+--------------------------------------------------------------------+


6. 안되는 부분이..

jsp단에서 배열값으로 4,5번을 가져온다고 하면..

로직 부분에서 반복문을 돌면서 디비에 있는 bo_seq 의 8번에 속한 file_no의 4,5번을 삭제하는 로직을 만들어야하는데..아무리 머리를 굴려봐도 방법이 생각이 안나네요..ㅠㅠ

0
0
  • 답변 1

  • JohnMark
    214
    2019-05-14 23:09:57

    제가 제대로 이해한건진 잘 모르겠지만

    file_old_no // [4,5]

     List<FileDTO> fileDtoList = boardDAO.view(dto.getBo_no());

    for(FileDTO file : fileDtoList){ //board seq 가 8인 객체들을 대상으로

    for(Integer no : file_old_no){ // 삭제될 파일 번호 리스트

     if(file.getNo() == no){

     삭제 

    }

    }

    }


    일것 같습니다.


    하지만 위 경우 N^2 의 시간복잡도를 가지기에

    저라면 Sql을 통해 한번에 처리할 것 같습니다.


    Delete baord where board_seq = ? and file_no IN ? 

    과 같은 쿼리가 나가는 메소드를 만들어 처리할 것 같네요

    휴대폰으로 답변을 적고 있어 깔끔하지 못합니다

    1
  • 로그인을 하시면 답변을 등록할 수 있습니다.