✿∘˚˳°∘°

28일차 : JDBC 실습1 - 커뮤니티( 로그인 / 회원가입 / 게시판 ) 본문

국비수업/JDBC

28일차 : JDBC 실습1 - 커뮤니티( 로그인 / 회원가입 / 게시판 )

_HYE_ 2023. 1. 5. 18:20

20230104

 

[ DB ] : 실습을 위해 생성한 계정 / 테이블 / 시퀀스

-- 20230104 : JDBC(KH커뮤니티) 실습
CREATE USER jdbcex IDENTIFIED BY 1234;
GRANT CONNECT, RESOURCE TO jdbcex;
-- 회원 테이블
CREATE TABLE EXAM_MEMBER(
    MEMBER_NO       NUMBER          PRIMARY KEY,
    MEMBER_ID       VARCHAR2(20)    UNIQUE NOT NULL,
    MEMBER_PW       VARCHAR2(30)    NOT NULL,
    MEMBER_NAME     VARCHAR2(20)    NOT NULL,
    MEMBER_PHONE    CHAR(11)        NOT NULL
);
CREATE SEQUENCE EXAM_MEMBER_SEQ;

-- 게시판 테이블
CREATE TABLE EXAM_BOARD(
    BOARD_NO        NUMBER              PRIMARY KEY,
    BOARD_TITLE     VARCHAR2(100)       NOT NULL,
    BOARD_CONTENT   VARCHAR2(2000)      NOT NULL,
    BOARD_WRITER    NUMBER  REFERENCES EXAM_MEMBER ON DELETE SET NULL,
    READ_COUNT     NUMBER  default 0   NOT NULL,
    WRITE_DATE      DATE                NOT NULL
);
CREATE SEQUENCE EXAM_BOARD_SEQ;

 

 

[ JAVA 클래스 ] 

[ MemberStart / Member / Board / MemberConroller / MemberDao / MemberService() / JDBCTemplate() ]

 

Member.java

package kr.or.iei.member.vo;

public class Member {

	private int memberNo;
	private String memberId;
	private String memberPw;
	private String memberName;
	private String memberPhone;
	
	public Member() {
		super();
		// TODO Auto-generated constructor stub
	}
	public Member(int memberNo, String memberId, String memberPw, String memberName, String memberPhone) {
		super();
		this.memberNo = memberNo;
		this.memberId = memberId;
		this.memberPw = memberPw;
		this.memberName = memberName;
		this.memberPhone = memberPhone;
	}
	
	public int getMemberNo() {
		return memberNo;
	}
	public void setMemberNo(int memberNo) {
		this.memberNo = memberNo;
	}
	public String getMemberId() {
		return memberId;
	}
	public void setMemberId(String memberId) {
		this.memberId = memberId;
	}
	public String getMemberPw() {
		return memberPw;
	}
	public void setMemberPw(String memberPw) {
		this.memberPw = memberPw;
	}
	public String getMemberName() {
		return memberName;
	}
	public void setMemberName(String memberName) {
		this.memberName = memberName;
	}
	public String getMemberPhone() {
		return memberPhone;
	}
	public void setMemberPhone(String memberPhone) {
		this.memberPhone = memberPhone;
	}		
}

 

Board.java : 보통 테이블이 생성되면 VO도 생성된다.

보통 테이블 따라 VO의 변수가 정해지는데, 필요에 따라 추가가능 - 현재 BOARD테이블의 WRITENAME처럼

( 단, getter / setter 만드는걸 잊지말기! )

package kr.or.iei.member.vo;

public class Board{

	private int boardNo;
	private String boardTitle;
	private String boardContent;
	private int boardWriter;
	private int readCount;
	private String writeDate;
	private String writeName;
	
	public Board() {
		super();
		// TODO Auto-generated constructor stub
	}
	public Board(int boardNo, String boardTitle, String boardContent, int boardWriter, int readCount,
			String writeDate, String writeName) {
		super();
		this.boardNo = boardNo;
		this.boardTitle = boardTitle;
		this.boardContent = boardContent;
		this.boardWriter = boardWriter;
		this.readCount = readCount;
		this.writeDate = writeDate;
	}
	public int getBoardNo() {
		return boardNo;
	}
	public void setBoardNo(int boardNo) {
		this.boardNo = boardNo;
	}
	public String getBoardTitle() {
		return boardTitle;
	}
	public void setBoardTitle(String boardTitle) {
		this.boardTitle = boardTitle;
	}
	public String getBoardContent() {
		return boardContent;
	}
	public void setBoardContent(String boardContent) {
		this.boardContent = boardContent;
	}
	public int getBoardWriter() {
		return boardWriter;
	}
	public void setBoardWriter(int boardWriter) {
		this.boardWriter = boardWriter;
	}
	public int getReadCount() {
		return readCount;
	}
	public void setReadCount(int readCount) {
		this.readCount = readCount;
	}
	public String getWriteDate() {
		return writeDate;
	}
	public void setWriteDate(String writeDate) {
		this.writeDate = writeDate;
	}	
	public String getWriteName() {
		return writeName;
	}
	public void setWriteName(String writeName) {
		this.writeName = writeName;
	}
}

 

JDBCTemplate.java

package common;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBCTemplate {
	//Connection 연결
	//close - conn, stmt, rset
	// commit / rollback
	
	public static Connection getConnection() {
		Connection conn = null;
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe","jdbcex","1234");
			conn.setAutoCommit(false);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}		
		return conn;
	}
	
	public static void commit(Connection conn) {
		try {
			if(conn != null && !conn.isClosed()) {
				conn.commit();
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public static void rollback(Connection conn) {
		try {
			if(conn != null && !conn.isClosed()) {
				conn.rollback();
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public static void close(Connection conn) {
		try {
			if(conn != null & !conn.isClosed()) {
				conn.close();
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public static void close(Statement stmt) {
		try {
			if(stmt != null && !stmt.isClosed()) {
				stmt.close();
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public static void close(ResultSet rset) {
		try {
			if(rset != null && !rset.isClosed()) {
				rset.close();
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

 

MemberController의 변수선언과 생성자

	private Scanner sc;
	private MemberService service;
	private Member loginMember; // null이면 로그인이 안된상태
	boolean bool;

	public MemberController() {
		super();
		sc = new Scanner(System.in);
		service = new MemberService();
		loginMember = null;//로그인이 안된상태, 로그인이 되었으면 해당 회원정보를 담아 둘 변수
		bool = true;
	}

 

MemberService의 변수선언과 생성자

	private MemberDao dao;

	public MemberService() {
		super();
		dao = new MemberDao();
	}

 

MemberController - main()

	public void main() {
		while (bool) {
			if(loginMember == null) {
				menu();				
			}else {
				loginMenu();
			}
		}
	}

 

[ 1 ] menu() : 로그인 전 메뉴화면

	public void menu() {
		System.out.println("\n----- KH 커뮤니티 -----\n");
		System.out.println("1. 로그인하기");
		System.out.println("2. 회원가입");
		System.out.println("3. 아이디 찾기");
		System.out.println("0. 프로그램 종료");
		System.out.print("선택 >> ");
		int sel = sc.nextInt();

		switch (sel) {
		case 1:
			login();
			break;
		case 2:
			insertMember();
			break;
		case 3:
			searchIdMember();
			break;
		case 0:
			System.out.println("프로그램을 종료 합니다");
			bool = false;
			break;
		default:
			System.out.println("잘못입력하셨습니다.");
		}
	}

 

1 - 1.로그인하기

MemberController.java

	public void login() {
		// select * from exam_member where member_id = ? and member_pw = ?;
		System.out.println("\n----- 로그인 -----\n");
		System.out.print("ID 입력 : ");
		String memberId = sc.next();
		System.out.print("PW 입력 : ");
		String memberPw = sc.next();

		Member m = service.login(memberId, memberPw);
		if (m != null) {
			loginMember = m; // 조회된 회원정보를 로그인변수에 대입
			System.out.println("로그인 성공!");
		} else {
			System.out.println("아이디 또는 비밀번호를 확인하세요.");
		}
	}


MemberService.java

	public Member login(String memberId, String memberPw) {
		Connection conn = JDBCTemplate.getConnection();
		Member m = dao.login(conn, memberId, memberPw);
		JDBCTemplate.close(conn);
		return m;
	}


MemberDao.java

	public Member login(Connection conn, String memberId, String memberPw) {
		PreparedStatement pstmt = null;
		ResultSet rset = null;

		Member m = null;
		
		String query = "select * from exam_member where member_id = ? and member_pw = ?";
		
		try {
			pstmt = conn.prepareStatement(query);
			pstmt.setString(1, memberId);
			pstmt.setString(2, memberPw);
			rset = pstmt.executeQuery();
			if(rset.next()) {
				m = new Member();
				m.setMemberNo(rset.getInt("member_no"));
				m.setMemberId(rset.getString("member_id"));
				m.setMemberPw(rset.getString("member_pw"));
				m.setMemberName(rset.getString("member_name"));
				m.setMemberPhone(rset.getString("member_phone"));
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			JDBCTemplate.close(rset);
			JDBCTemplate.close(pstmt);
		}
		return m;
	}

 

1 - 2. 회원가입

MemberController.java

	public void insertMember() {
		Member m = new Member();
		System.out.println("\n----- 회원 가입 -----\n");
		System.out.print("ID 입력 : ");
		m.setMemberId(sc.next());
		System.out.print("PW 입력 : ");
		m.setMemberPw(sc.next());
		System.out.print("이름 입력 : ");
		m.setMemberName(sc.next());
		System.out.print("전화번호 입력('-'제외) : ");
		m.setMemberPhone(sc.next());

		int result = service.insertMember(m);
		if (result > 0) {
			System.out.println("회원가입 성공");
		} else {
			System.out.println("회원가입 실패");
		}
	}


MemberService.java

	public int insertMember(Member m) {
		Connection conn = JDBCTemplate.getConnection();
		int result = dao.insertMember(conn, m);
		if(result > 0) {
			JDBCTemplate.commit(conn);
		}else {
			JDBCTemplate.rollback(conn);
		}
		JDBCTemplate.close(conn);
		return result;
	}


MemberDao.java

	public int insertMember(Connection conn, Member m) {
		PreparedStatement pstmt = null;
		int result = 0;
		String query = "insert into exam_member values(exam_member_seq.nextval, ?, ?, ?, ? )";
		
		try {
			pstmt = conn.prepareStatement(query);
			pstmt.setString(1, m.getMemberId());
			pstmt.setString(2, m.getMemberPw());
			pstmt.setString(3, m.getMemberName());
			pstmt.setString(4, m.getMemberPhone());
			result = pstmt.executeUpdate();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			JDBCTemplate.close(pstmt);
		}
		return result;
	}

 

1 - 3. 아이디 찾기

MemberController.java

	public void searchIdMember() {
		// select member_id from exam_member where member_name = ? and member_phone = ?;

		System.out.println("\n----- 아이디 찾기 -----\n");
		System.out.print("이름 입력 : ");
		String memberName = sc.next();
		System.out.print("전화번호 입력 : ");
		String memberPhone = sc.next();

		String memberId = service.searchIdMember(memberName, memberPhone);
		if (memberId != null) {
			System.out.println("아이디는 [ " + memberId + " ] 입니다.");
		} else {
			System.out.println("일치하는 정보가 없습니다.");
		}
	}


MemberService.java

	public String searchIdMember(String memberName, String memberPhone) {
		Connection conn = JDBCTemplate.getConnection();
		String memberId = dao.searchIdMember(conn, memberName, memberPhone);
		
		JDBCTemplate.close(conn);
		return memberId;
	}


MemberDao.java

	public String searchIdMember(Connection conn, String memberName, String memberPhone) {
		PreparedStatement pstmt = null;
		ResultSet rset = null;
		
		String memberId = null;
		String query = "select member_id from exam_member where member_Name = ? and member_phone = ?";
		
		try {
			pstmt = conn.prepareStatement(query);
			pstmt.setString(1, memberName);
			pstmt.setString(2, memberPhone);
			rset = pstmt.executeQuery();
			if(rset.next()) {
				memberId = rset.getString("member_id");
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			JDBCTemplate.close(pstmt);
			JDBCTemplate.close(rset);
		}	
		return memberId;
	}

 

 

[ 2 ] loginMenu() : 로그인 후 메뉴화면

	public void loginMenu() {
		System.out.println("\n----- KH 커뮤니티 -----\n");
		System.out.println("1. 게시물 목록 보기");
		System.out.println("2. 게시물 상세 보기");
		System.out.println("3. 게시물 등록");
		System.out.println("4. 게시물 수정");
		System.out.println("5. 게시물 삭제");
		System.out.println("6. 내 정보 보기");
		System.out.println("7. 내 정보 변경");
		System.out.println("8. 회원탈퇴");
		System.out.println("0. 로그아웃");
		System.out.print("선택 >> ");
		int sel = sc.nextInt();
		
		switch(sel) {
		case 1:
			printAllBoard();
			break;
		case 2:
			printDetailBoard();
			break;
		case 3:
			boardUpload();
			break;
		case 4:
			updateBoard();
			break;
		case 5:
			deleteBoard();
			break;
		case 6:
			printMyInfo();
			break;
		case 7:
			updateMember();
			break;
		case 8:
			deleteMember();
			break;
		case 0:
			loginMember = null;
			break;
		default:
			System.out.println("잘못입력");
		}	
	}

 

2 - 1.게시물 목록 보기

MemberController.java

	public void printAllBoard() {
		System.out.println("\n----- 게시물 목록 -----\n");
		ArrayList<Board> list = service.printAllBoard();
		for(Board b : list) {
			System.out.println(b.getBoardNo()+"\t"+b.getBoardTitle()+"\t"+b.getWriteName()+"\t"+b.getReadCount()+"\t"+b.getWriteDate());
		}
	}


MemberService.java

	public ArrayList<Board> printAllBoard() {
		Connection conn = JDBCTemplate.getConnection();
		ArrayList<Board> list = dao.printAllBoard(conn);
		JDBCTemplate.close(conn);
		return list;
	}


MemberDao.java

	public ArrayList<Board> printAllBoard(Connection conn) {
		PreparedStatement pstmt = null;
		ResultSet rset = null;
		
		ArrayList<Board> list = new ArrayList<Board>();
		String qeury = "select board_no, board_title, nvl(member_name,'탈퇴회원') as member_name, read_count, to_char(write_date, 'yyyy-mm-dd') as write_date from exam_board left join exam_member on(board_writer = member_no) ";
		
		try {
			pstmt = conn.prepareStatement(qeury);
			rset = pstmt.executeQuery();
			while(rset.next()) {
				Board b = new Board();
				b.setBoardNo(rset.getInt("board_no"));
				b.setBoardTitle(rset.getString("board_title"));	
				b.setWriteName(rset.getString("member_name"));						
				b.setReadCount(rset.getInt("read_count"));
				b.setWriteDate(rset.getString("write_date"));
				
				list.add(b);		
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			JDBCTemplate.close(pstmt);
			JDBCTemplate.close(rset);
		}
		return list;
	}

 

2 - 2. 게시물 상세 보기

MemberController.java

	public void printDetailBoard() {
		// select board_no, board_title, board_content, member_name, read_count, write_date 
		// from exam_board join exam_member where board_no = ?;
		System.out.print("게시물 번호 입력 : ");
		int boardNo = sc.nextInt();
		Board b = service.printDetailBoard(boardNo);
		if(b != null) {
			System.out.println("게시물 번호 : "+b.getBoardNo());
			System.out.println("게시물 제목 : "+b.getBoardTitle());
			System.out.println("게시물 내용 : "+b.getBoardContent());
			System.out.println("게시물 작성자 : "+b.getWriteName());
			System.out.println("게시물 조회수 : "+b.getReadCount());
			System.out.println("게시물 작성일 : "+b.getWriteDate());
		}else {
			System.out.println("게시글이 없습니다.");
		}
	}


MemberService.java

	public Board printDetailBoard(int boardNo) {
		Connection conn = JDBCTemplate.getConnection();
		Board b = null;		
		
		int result = dao.readCount(conn, boardNo);
		if(result > 0) {
			b = dao.printDetailBoard(conn, boardNo);
			if(b != null) {
				JDBCTemplate.commit(conn);				
			}else {
				JDBCTemplate.rollback(conn);
			}
		}else {
			JDBCTemplate.rollback(conn);
		}		
		JDBCTemplate.close(conn);
		return b;
	}

MemberDao.java 1 : 조회수카운트

	public int readCount(Connection conn, int boardNo) {
		PreparedStatement pstmt = null;
		int result = 0;
		
		String query = "update exam_board set read_count = read_count + 1 where board_No = ? ";		
		try {
			pstmt = conn.prepareStatement(query);
			pstmt.setInt(1, boardNo);
			result = pstmt.executeUpdate();

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			JDBCTemplate.close(pstmt);
		}
		return result;
	}


MemberDao.java 2 : 상세보기

	public Board printDetailBoard(Connection conn, int boardNo) {
		PreparedStatement pstmt = null;
		ResultSet rset = null;
		
		Board b = null;
		String query = "select board_no, board_title, board_content, nvl(member_name,'탈퇴회원') as member_name, read_count, to_char(write_date, 'yyyy-mm-dd') as write_date from exam_board left join exam_member on(board_writer = member_no) where board_no = ?";
		
		try {
			pstmt = conn.prepareStatement(query);
			pstmt.setInt(1, boardNo);
			rset = pstmt.executeQuery();
			if(rset.next()) {
				b = new Board();
				b.setBoardNo(rset.getInt("board_no"));
				b.setBoardTitle(rset.getString("board_title"));
				b.setBoardContent(rset.getString("board_content"));
				b.setWriteName(rset.getString("member_name"));
				b.setReadCount(rset.getInt("read_count"));
				b.setWriteDate(rset.getString("write_date"));
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			JDBCTemplate.close(pstmt);
			JDBCTemplate.close(pstmt);
		}		
		return b;
	}

 

2 - 3. 게시물 등록

MemberController.java

	public void boardUpload() {
		//insert into exam_board values(exam_board_seq, 제목, 내용, 작성자, 조회수, 작성일)
		System.out.print("제목 입력 : ");
		sc.nextLine();
		String boardTitle = sc.nextLine();
		System.out.print("내용 입력 : ");
		String boardContent = sc.nextLine();
		
		int result = service.boardUpload(boardTitle, boardContent, loginMember);
		if(result > 0) {
			System.out.println("게시글 등록 성공!");
		}else {
			System.out.println("등록 실패!");
		}
	}


MemberService.java

	public int boardUpload(String boardTitle, String boardContent, Member loginMember) {
		Connection conn = JDBCTemplate.getConnection();
		int result = dao.boardUpload(conn, boardTitle, boardContent, loginMember);
		if(result > 0) {
			JDBCTemplate.commit(conn);
		}else {
			JDBCTemplate.rollback(conn);
		}
		JDBCTemplate.close(conn);
		return result;
	}


MemberDao.java

	public int boardUpload(Connection conn, String boardTitle, String boardContent, Member loginMember) {
		PreparedStatement pstmt = null;
		int result = 0;
		
		String query = "insert into exam_board values(exam_board_seq.nextval, ?, ?, ?, default, sysdate)";
		
		try {
			pstmt = conn.prepareStatement(query);
			pstmt.setString(1, boardTitle);
			pstmt.setString(2, boardContent);
			pstmt.setInt(3, loginMember.getMemberNo());
			result = pstmt.executeUpdate();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			JDBCTemplate.close(pstmt);
		}
		return result;
	}

 

2 - 4. 게시물 수정

MemberController.java

	public void updateBoard() {
		//update exam_board set board_title = ? , board_content = ? where board_no = ?;
		System.out.print("게시물 번호 입력 : ");
		int boardNo = sc.nextInt();
		// 작성자와 로그인한유저가 동일할 경우에만 수정가능
		// 작성자 정보 : select board_writer from board where board_no = ?
		// 상세보기에서 찾아오면 안되는 이유 
		//1. 조회 로직을보면 작성자번호는 조회X(작성자 이름만 하고있음) 
		//2. 불필요한 정보가 너무많다
		//3. 로직실행시 조회수가 올라가게 되어있음
		int boardWriter = service.selectBoardWriter(boardNo);
		if(boardWriter == 0) {
			System.out.println("게시물 번호를 확인하세요.");
		} else {
			if(boardWriter == loginMember.getMemberNo()) {
				System.out.print("제목 입력 : ");
				sc.nextLine();
				String boardTitle = sc.nextLine();
				System.out.print("내용 입력 : ");
				String boardContent = sc.nextLine();
				
				int result = service.updateBoard(boardNo, boardTitle, boardContent);
				if(result > 0) {
					System.out.println("게시글 수정 성공!");
				}else {
					System.out.println("게시글 수정 실패!");
				}				
			} else {
				System.out.println("작성자만 수정 할 수 있습니다.");
			}
		}
	}

MemberService.java 1. 작성자 체크

	public int selectBoardWriter(int boardNo) {
		Connection conn = JDBCTemplate.getConnection();
		int boardWriter = dao.selectBoardWriter(conn, boardNo);
		JDBCTemplate.close(conn);
		return boardWriter;
	}


MemberService.java 2. 게시물 수정

	public int updateBoard(int boardNo, String boardTitle, String boardContent, int memberNo) {
		Connection conn = JDBCTemplate.getConnection();
		int result = dao.updateBoard(conn, boardNo, boardTitle, boardContent, memberNo);
		if(result > 0) {
			JDBCTemplate.commit(conn);
		}else {
			JDBCTemplate.rollback(conn);
		}
		JDBCTemplate.close(conn);
		
		return result;
	}


MemberDao.java 1. 작성자 체크

	public int selectBoardWriter(Connection conn, int boardNo) {
		PreparedStatement pstmt = null;
		ResultSet rset = null;
		int boardWriter = 0;
		String query = "select board_writer from exam_board where board_no = ?";
		
		try {
			pstmt = conn.prepareStatement(query);
			pstmt.setInt(1, boardNo);
			rset = pstmt.executeQuery();
			if(rset.next()) {
				boardWriter = rset.getInt("board_writer");				
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			JDBCTemplate.close(rset);
			JDBCTemplate.close(pstmt);
		}
		return boardWriter;
	}

MemberDao.java 2. 게시물 수정

	public int updateBoard(Connection conn, int boardNo, String boardTitle, String boardContent, int memberNo) {
		PreparedStatement pstmt = null;
		int result = 0;
		String query = "update exam_board set board_title = ?, board_content = ? where board_no = ? and member_no = ?";
		
		try {
			pstmt = conn.prepareStatement(query);
			pstmt.setString(1, boardTitle);
			pstmt.setString(2, boardContent);
			pstmt.setInt(3, boardNo);
			pstmt.setInt(4, memberNo);
			result = pstmt.executeUpdate();
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			JDBCTemplate.close(pstmt);
		}
		return result;
	}

 

2 - 5. 게시물 삭제

게시물 수정 로직과 동일 / 아래코드는 쿼리문에서 조건을 and로 두가지를 주어 삭제하는 방법을 사용해보았다.

(단, 이 방법을 사용하면 DB작업 오류시에도 작성자만 수정가능하다는 문구가 뜸)

MemberController.java

	public void deleteBoard() {
		//delete from exam_tbl where board_no = ? && board_writer = ?
		System.out.print("게시물 번호 입력 : ");
		int boardNo = sc.nextInt();
		int boardWriter = loginMember.getMemberNo();
		int result = service.deleteBoard(boardNo, boardWriter);
		if(result == 1) {
			System.out.println("게시글 삭제 성공!");
		}else {
			System.out.println("작성자만 삭제가 가능합니다.");
		}
	}


MemberService.java

	public int deleteBoard(int boardNo, int boardWriter) {
		Connection conn = JDBCTemplate.getConnection();
		int result = dao.deleteBoard(conn, boardNo, boardWriter);
		if(result == 1) {
			JDBCTemplate.commit(conn);
		}else {
			JDBCTemplate.rollback(conn);
		}
		JDBCTemplate.close(conn);
		return result;
	}


MemberDao.java

	public int deleteBoard(Connection conn, int boardNo, int boardWriter) {
		PreparedStatement pstmt = null;
		int result = 0;
		String query = "delete from exam_board where board_no = ? and board_writer = ?";
		
		try {
			pstmt = conn.prepareStatement(query);
			pstmt.setInt(1, boardNo);
			pstmt.setInt(2, boardWriter);
			result = pstmt.executeUpdate();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			JDBCTemplate.close(pstmt);
		}
		return result;
	}

 

2 - 6. 내 정보 보기

MemberController.java

	public void printMyInfo() {
		System.out.println("\n----- 내 정보 보기 -----\n");
		System.out.println("회원 번호 : "+loginMember.getMemberNo());
		System.out.println("아이디 : "+loginMember.getMemberId());
		System.out.println("비밀번호 : "+loginMember.getMemberPw());
		System.out.println("이름 : "+loginMember.getMemberName());
		System.out.println("전화번호 : "+loginMember.getMemberPhone());
	}

 

2 - 7. 내 정보 변경

MemberController.java

	public void updateMember() {
		//update exam_member set member_pw = ?, member_phone = ? where member_no = ?;
		System.out.print("변경할 PW입력 : ");
		String memberPw = sc.next();
		System.out.print("변경할 전화번호 입력('-'생략) : ");
		String memberPhone = sc.next();
		
		int result = service.updateMember(memberPw, memberPhone, loginMember.getMemberNo());
		if(result > 0) {
			loginMember.setMemberPw(memberPw); //수정 성공 시 값을 업데이트 해줘야 6. 내정보보기에서도 반영된다.
			loginMember.setMemberPhone(memberPhone);
			System.out.println("정보 수정 성공");
		}else {
			System.out.println("수정 실패");
		}
	}


MemberService.java

	public int updateMember(String memberPw, String memberPhone, int memberNo) {
		Connection conn = JDBCTemplate.getConnection();
		int result = dao.updateMember(conn, memberPw, memberPhone, memberNo);
		if(result > 0) {
			JDBCTemplate.commit(conn);
		}else {
			JDBCTemplate.rollback(conn);
		}
		JDBCTemplate.close(conn);
		return result;
	}


MemberDao.java

	public int updateMember(Connection conn, String memberPw, String memberPhone, int memberNo) {
		PreparedStatement pstmt = null;
		int result = 0;
		String query = "update exam_member set member_pw = ?, member_phone = ? where member_no = ?";
		
		try {
			pstmt = conn.prepareStatement(query);
			pstmt.setString(1, memberPw);
			pstmt.setString(2, memberPhone);
			pstmt.setInt(3, memberNo);
			result = pstmt.executeUpdate();

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			JDBCTemplate.close(pstmt);
		}
		return result;
	}

 

2 - 8. 회원 탈퇴(탈퇴 시, 게시글을 작성했었으면 [ 작성자 : 탈퇴회원 ] 으로 출력

MemberController.java

	public void deleteMember() {
		//delete from exam_member where member_no = ?
		System.out.print("정말 탈퇴하시겠습니까?[ 1. YES / 2. NO ] : ");
		int sel = sc.nextInt();
		if(sel == 1) {
			System.out.println("BYE~BYE~");
			int result = service.deleteMember(loginMember.getMemberNo());
			if(result > 0) {
				loginMember = null;
				System.out.println("탈퇴 완료");
			}else {
				System.out.println("탈퇴 실패");
			}
		}
	}


MemberService.java

	public int deleteMember(int memberNo) {
		Connection conn = JDBCTemplate.getConnection();
		int result = dao.deleteMember(conn, memberNo);
		if(result > 0) {
			JDBCTemplate.commit(conn);
		}else {
			JDBCTemplate.rollback(conn);
		}
		JDBCTemplate.close(conn);
		return result;
	}


MemberDao.java

	public int deleteMember(Connection conn, int memberNo) {
		PreparedStatement pstmt = null;
		int result = 0;
		String query = "delete from exam_member where member_no = ?";
		
		try {
			pstmt = conn.prepareStatement(query);
			pstmt.setInt(1, memberNo);
			result = pstmt.executeUpdate();
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			JDBCTemplate.close(pstmt);
		}
		return result;
	}

 

[ 후기 ]

테이블이 고작 한개 더 늘었는데 너무 정신이 없었다. 신경써 줘야할 부분도 많고, 쿼리문을 잘 작성해야 효율적인 코드가 나온다는걸 체험할 수 있었다. 결과값은 어찌저찌 잘 나오는데 불필요한 부분을 너무 많이 작성하는 것 같아서 이런부분을 신경써야겠다. 

 

오늘 실수한 점

> 2 - 2. 게시물 상세보기 - 조회수카운트 메소드를 상세보기보다 나중에 실행하여 제대로된 값이 나오지않음

> 쿼리문 컬럼명 실수(자꾸 java변수명을 적음)

> 자원반환(conn, pstmt, rset close()) 자꾸 까먹음

'국비수업 > JDBC' 카테고리의 다른 글

29일차 : JDBC 실습1. LIBRARY(도서대여) 프로그램  (0) 2023.01.06
27일차 : JDBC - Singleton  (0) 2023.01.03
26일차 : JDBC - PreparedStatement  (0) 2023.01.02
25일차 : JDBC - Statement  (0) 2022.12.30
Comments