코딩 노트

데이터베이스 - 수정 본문

Database

데이터베이스 - 수정

newbyeol 2023. 7. 25. 10:13

데이터를 DTO로 묶어서 보는 능력과 DTO와 ListDto를 구별하는 능력이 필요하다.

수정과 삭제는 반환형이 boolean이고 등록은 반환형이 void이다.

JDBC - 수정(Update)

- no를 이용해서 name과 type을 바꾼다.
- 적용된 행이 있는지 없는지를 알아야 한다.

//U(수정) 메소드

//수정이 됐는지 꼭 확인을 하기 위해 Boolean

public boolean update(PocketmonDto dto) {

String sql = "update pocketmon set name=?, type=? where no=?";

Object[] data = {

dto.getName(), dto.getType(), dto.getNo()

};

 

JdbcTemplate jdbcTemplate = JdbcUtils.getJdbcTemplate();

int result = jdbcTemplate.update(sql, data);

 

// if (result > 0)return true; //result가 0보다 크면 참

// else return false; //아니면 거짓을 반환해라

 

return result > 0; //result가 0보다 큰지 판정해서 반환해라

 

}

public static void main(String[] args) {

// Pocketmon 정보수정

// 데이터 준비 - DTO

PocketmonDto dto = new PocketmonDto();

dto.setNo(3);

dto.setName("이상해곷");

dto.setType("독");

 

//DB처리

PocketmonDao dao = new PocketmonDao();

boolean result = dao.update(dto);

 

if(result) {

System.out.println("변경 완료");

} else{

System.out.println("존재하지 않는 몬스터 번호");

}

}

 

(Q) 도서 프로그램 수정(가격/ 도서명, 저자, 출판사)

//수정(도서가격)

public boolean updateBookPrice(BookDto dto) {

String sql = "update book set book_price=? where book_id =?";

Object[] data = {dto.getBookPrice(), dto.getBookId()};

 

JdbcTemplate jdbcTemplate = JdbcUtils.getJdbcTemplate();

 

int result = jdbcTemplate.update(sql,data);

return result > 0;

 

return jdbcTemplate.update(sql,data) > 0; //위 코드를 한 줄로 줄인 것

}

 

//수정(도서명, 저자, 출판사)

public boolean updateBookInfo(BookDto dto) {

String sql = "update book set book_title=?, book_author=?, book_publisher=? where book_id=?";

Object[] data = {dto.getBookTitle(), dto.getBookAuthor(), dto.getBookPublisher(),

dto.getBookId()};

 

JdbcTemplate jdbcTemplate = JdbcUtils.getJdbcTemplate();

return jdbcTemplate.update(sql,data) > 0;

}

}

public static void main(String[] args) {

// 도서가격을 수정하는 프로그램을 구현

// 메소드 이름은 updateBookPrice

BookDto dto = new BookDto();

dto.setBookId(1);

dto.setBookPrice(20.20f);

 

BookDao dao = new BookDao();

boolean result = dao.updateBookPrice(dto);

 

if (result) {

System.out.println("도서 가격이 수정 완료되었습니다.");

} else {

System.out.println("등록되지 않은 도서입니다.");

}

}

}

public static void main(String[] args) {

// 도서명, 저자, 출판사를 수정하는 프로그램을 구현

// 메소드 이름은 updateBookInfo

 

BookDto dto = new BookDto();

dto.setBookId(1);

dto.setBookTitle("abc");

dto.setBookAuthor("mary");

dto.setBookPublisher("abcChoco");

 

BookDao dao = new BookDao();

boolean result = dao.updateBookInfo(dto);

 

if (result) {

System.out.println("도서 정보가 수정이 완료되었습니다.");

} else {

System.out.println("등록되지 않은 도서입니다.");

}

}

}

JDBC - 삭제(Delete)

- delete 처리를 위해서는 데이터가 1개 필요하다.

= DTO를 쓰기 애매하다...

- 삭제 메소드는 Primary key(기본키)를 이용하여 하나씩 지운다.
- 조건에 따라서 삭제가 안될 수 있기 때문에 결과를 반환해야 한다.

//D(삭제) 메소드

//- 삭제 메소드는 Primary key(기본키)를 이용하여 하나씩 지운다.

//- 조건에 따라서 삭제가 안될 수 있기 때문에 결과를 반환해야 한다.

public boolean delete(int no) {

String sql = "delete pocketmon where no=?";

Object[] data = {no};

 

JdbcTemplate jdbcTemplate = JdbcUtils.getJdbcTemplate();

return jdbcTemplate.update(sql,data) > 0;

}

public static void main(String[] args) {

// 포켓몬스터 삭제 프로그램

//데이터가 하나밖에 없기 때문에 DTO가 필요 없다.

 

//데이터

int no = 43;

 

//DB처리

PocketmonDao dao = new PocketmonDao();

boolean result = dao.delete(no);

 

if(result) {

System.out.println("포켓몬스터 정보 삭제 완료");

} else {

System.out.println("존재하지 않는 포켓몬스터 번호");

}

}

JDBC - 조회

- 여러 개의 데이터가 나오는 구문이다.
- 자바에서는 List<DTO> 형태로 취급한다.
- 조회하려면 Mapper가 필요하다.

//Mapper는 외부에 필드로 생성

private PocketmonMapper mapper = new PocketmonMapper();

 

//R(조회) 메소드

public List<PocketmonDto> selectList(){

String sql = "select * from pocketmon";

 

JdbcTemplate jdbcTemplate = JdbcUtils.getJdbcTemplate();

return jdbcTemplate.query(sql, mapper);

}

public static void main(String[] args) {

// 저장된 포켓몬스터를 모두 불러오겠다.

 

PocketmonDao dao = new PocketmonDao();

List<PocketmonDto> list = dao.selectList();

 

//list를 활용해서 하고 싶은 작업을 하면 된다.(반복문, 조건, 출력)

System.out.println("조회 결과 수 : " + list.size());

for(PocketmonDto dto : list) {

System.out.println(dto);

}

}

JDBC - 상세

- Primary key를 이용하여 하나의 결과만 나오는 구문이다.
- 자바에서는 DTO 형태로 취급한다.

- 조회하려면 Mapper가 필요하다.

//R(상세) 메소드

//public PocketmonDto selectOne(PocketmonDto dto){

public PocketmonDto selectOne(int no) {

String sql = "select * from pocketmon where no=?";

Object[] data = {no};

 

JdbcTemplate jdbcTemplate = JdbcUtils.getJdbcTemplate();

List<PocketmonDto> list = jdbcTemplate.query(sql, mapper,data);

// if (list.isEmpty()) {

// return null;

// } else {

// return list.get(0);

// }

return list.isEmpty() ? null : list.get(0);

}

public static void main(String[] args) {

// 포켓몬스터 번호를 이용하여 상세조회

 

//데이터

int no = 1000;

 

//처리

PocketmonDao dao = new PocketmonDao();

PocketmonDto dto = dao.selectOne(no);

 

//출력

 

if(dto == null) {

System.out.println("찾으시는 번호의 몬스터가 없습니다.");

} else {

System.out.println(dto.getNo());

System.out.println(dto.getName());

System.out.println(dto.getType());

}

}

 

(Q) 도서 목록 조회

//Mapper

private BookMapper mapper = new BookMapper();

 

//조회(도서 목록)

public List<BookDto> selectList(){

String sql = "select * from book order by book_id asc";

 

JdbcTemplate jdbcTemplate = JdbcUtils.getJdbcTemplate();

return jdbcTemplate.query(sql, mapper);

}

public static void main(String[] args) {

// 도서 목록 출력 프로그램

//데이터 없음

 

//DB처리

BookDao dao = new BookDao();

List<BookDto> list = dao.selectList();

 

if(list.isEmpty()) {

System.out.println("등록된 도서가 없습니다.");

} else {

System.out.println("총 " + list.size() + "개의 도서가 존재합니다.");

for(BookDto dto : list) {

System.out.println(dto.getBookTitle()+"($" + dto.getBookPrice() + ")");

}

}

 

}

 

(Q) 탑앤 쿼리를 사용해 페이징 목록 조회

//일반 게시글 목록 조회 

//Mapper

private BoardMapper mapper = new BoardMapper();

 

//조회(목록)

public List<BoardDto> selectList(){

String sql = "select * from board order by board_no desc";

 

JdbcTemplate jdbcTemplate = JdbcUtils.getJdbcTemplate();

return jdbcTemplate.query(sql, mapper);

}

//(심화) 페이징 목록 조회

public List<BoardDto> selectListByPage(int page){

int end = page * 10;

int begin = end - 9;

 

String sql = "select * from ("

+ "select rownum rn, TMP.* from("

+ "select * from board order by board_no desc"

+ ")TMP"

+ ") where rn between ? and ?";

 

Object[] data = {begin, end};

 

JdbcTemplate jdbcTemplate = JdbcUtils.getJdbcTemplate();

return jdbcTemplate.query(sql, mapper, data);

}

public static void main(String[] args) {

// 게시글 목록 출력 프로그램

//데이터

int page = 1;

 

//DB처리

BoardDao dao = new BoardDao();

List<BoardDto> list = dao.selectListByPage(page);

 

for(BoardDto dto : list) {

System.out.print("[" + dto.getBoardNo() + "] ");

System.out.println(dto.getBoardTitle());

}

}

 

(Q) 회원 목록 전체 조회(페이징 조회)

//Mapper

private MemberMapper mapper = new MemberMapper();

//회원 전체 목록 조회

public List<MemberDto> selectList(){

String sql = "select * from member";

 

JdbcTemplate jdbcTemplate = JdbcUtils.getJdbcTemplate();

return jdbcTemplate.query(sql, mapper);

}

 

//회원 페이징 목록 조회

public List<MemberDto> selectListByPage(int page, int size){

int end = page * size;

int begin = end - (size - 1);

 

String sql = "select * from ("

+ "select rownum rn, TMP.* from("

+ "select * from member order by member_id desc"

+ ")TMP"

+ ") where rn between ? and ?";

 

Object[] data = {begin, end};

 

JdbcTemplate jdbcTemplate = JdbcUtils.getJdbcTemplate();

return jdbcTemplate.query(sql, mapper, data);

}

public static void main(String[] args) {

//회원 전체 목록

MemberDao dao = new MemberDao();

List<MemberDto> list = dao.selectList();

 

for(MemberDto dto : list) {

System.out.println(dto.getMemberId());

}

 

}

public static void main(String[] args) {

//페이지 번호를 이용하여 회원 목록을 조회

int page = 1;

int size = 10;

 

MemberDao dao = new MemberDao();

List<MemberDto> list = dao.selectListByPage(page,size);

 

if(list.isEmpty()) {

System.out.println("표시할 항목이 없습니다.");

} else {

for(MemberDto dto : list) {

System.out.print(dto.getMemberId());

}

}

}