본문 바로가기

2024_풀스택학원/Back-end

[Java] JDBC_mini_board

 

Main.java

package view;

import java.nio.charset.Charset;
import java.security.MessageDigest;
import java.sql.Timestamp;
import java.util.Base64;
import java.util.List;
import java.util.Scanner;

import dao.BoardDAO;
import dao.MemberDAO;
import dto.BoardDTO;

public class Main {
	private static String getSha512(String plainText) {
	      try {
	         MessageDigest md = MessageDigest.getInstance("SHA-512");
	         byte[] bytes = plainText.getBytes(Charset.forName("UTF-8"));
	         md.update(bytes);
	         return new String(Base64.getEncoder().encode(md.digest()));
	      } catch (Exception e) {
	         System.out.println("Sha512 error.");
	         e.printStackTrace(); 
	      }
	      return null;
	   }
	public static void main(String[] args) throws Exception{
		Scanner sc = new Scanner(System.in);
		BoardDAO board= new BoardDAO();
		MemberDAO member = new MemberDAO();

		while(true) {
			System.out.println("<< Mini Board 인증 >>");
			System.out.println("1. 로그인");
			System.out.println("2. 회원가입");
			System.out.println("0. 시스템 종료");
			System.out.print(" >>");
			int menu = Integer.parseInt(sc.nextLine());

			if(menu==1) {
				System.out.println("<< 로그인 >>");
				System.out.print("아이디 입력 : ");
				String id = sc.nextLine();
				System.out.print("비밀번호 입력 : ");
				String pw = getSha512(sc.nextLine());
			
				

				boolean resultLogin =member.login(id, pw);
				if(resultLogin==true) {
					System.out.println("로그인 성공!");
					String writer = id;

					while(true) {
						System.out.println("<<Main Board>>");
						System.out.println("1. 글 작성하기");
						System.out.println("2. 글 목록 보기");
						System.out.println("3. 글 검색 하기");
						System.out.println("4. 글 수정 하기");
						System.out.println("5. 글 삭제하기");
						System.out.println("0. 시스템 종료");
						System.out.println(" >>");
						int boardMenu=Integer.parseInt(sc.nextLine());

						if(boardMenu==1) {
							System.out.println("<< 글 작성하기 >>");
							System.out.println("작성할 내용:");
							String boardWrite = sc.nextLine();
							Timestamp write_date = new Timestamp(System.currentTimeMillis());

							boolean success = board.add(new BoardDTO(0,writer,boardWrite,write_date));
							if(success) {
								System.out.println("게시글이 성공적으로 작성되었습니다.");
								continue;
							} else {
								System.out.println("게시글 작성에 실패했습니다.");
								break;
							}
						} else if(boardMenu==2){
							System.out.println("<< 글 목록 출력 >>");
							System.out.println("글 번호\t작성자\t글 내용\t작성날짜");
							List<BoardDTO> list = board.getAdd();
							
							for(BoardDTO boardList : list) {
								System.out.println(boardList.getSeq()+"\t"+
							boardList.getWriter()+"\t"+boardList.getContents()+"\t"+
										boardList.getWrite_date());
							}
						} else if(boardMenu==3) {
							System.out.println("작성자로 검색 :");
							String searchWriter = sc.nextLine();
							List<BoardDTO> searchList = board.searchByWriter(searchWriter);
							System.out.println("글번호\t작성자\t글내용\t작성일자");
							for(BoardDTO dto : searchList) {
							System.out.println(dto.getSeq()+"\t"+dto.getWriter()+"\t"+dto.getContents()+"\t"+dto.getWrite_date());
							}
						} else if(boardMenu==4) {
							System.out.println("글 번호 기반으로 수정- 작성자, 내용, 날짜를 수정");
							System.out.print("수정할 id :");
							int targetID = Integer.parseInt(sc.nextLine());
							boolean result = board.checkId(targetID);
							
							if(result==true) {
								System.out.println("수정할 작성자 :");
								String updateWriter = sc.nextLine();
								System.out.println("수정할 내용 : ");
								String updateContents = sc.nextLine();
								
								 Timestamp updateWriteDate = new Timestamp(System.currentTimeMillis());
								 
								board.updateById(targetID, updateWriter,updateContents,updateWriteDate);
								System.out.println("해당 글이 정상적으로 수정됨");
								
							} else {
								System.out.println("해당 번호 글이 존재하지 않습니다.");
							}
							
						} else if(boardMenu==5) {
							System.out.println("삭제할 id :");
							int targetID = Integer.parseInt(sc.nextLine());
							int deleteId = board.deleteById(targetID);
							
							if(deleteId == 0) {
								System.out.println("삭제할 아이디가 없습니다.");
							} else {
								System.out.println("삭제되었습니다.");
							}
						} else {
							System.out.println("시스템 종료");
							System.exit(0);
						}

						break;
					}

				}else {
					System.out.println("로그인 실패!");

				}


			} else if(menu ==2) {
				System.out.println("<< 회원가입 >>");
				System.out.print("아이디 입력 : ");
				String id = sc.nextLine();
				System.out.print("비밀번호 입력 :");
				String pw = getSha512(sc.nextLine());
				System.out.print("이름 입력 : ");
				String name = sc.nextLine();
				Timestamp currentDate = new Timestamp(System.currentTimeMillis());


				boolean joinResult = member.join(id,pw,name,currentDate);
				if(joinResult==true) {
					System.out.println("회원가입 성공");
				} else {
					System.out.println("회원가입 실패");
				}

			} else {
				System.out.println("시스템 종료");
				System.exit(0);

			}
		}






	}


}

 

BoardDTO.java

package dto;

import java.sql.Timestamp;

public class BoardDTO {
	private int seq;
	private String writer;
	private String contents;
	private Timestamp write_date;
	public BoardDTO() {};
	
	public BoardDTO(int seq_number, String writer, String contents, Timestamp write_date) {
		super();
		this.seq = seq;
		this.writer = writer;
		this.contents = contents;
		this.write_date = write_date;
	}
	public int getSeq() {
		return seq;
	}
	public void setSeq(int seq) {
		this.seq = seq;
	}
	public String getWriter() {
		return writer;
	}
	public void setWriter(String writer) {
		this.writer = writer;
	}
	public String getContents() {
		return contents;
	}
	public void setContents(String contents) {
		this.contents = contents;
	}
	public Timestamp getWrite_date() {
		return write_date;
	}
	public void setWrite_date(Timestamp write_date) {
		this.write_date = write_date;
	}
	
	
	
	
}

 

BoardDAO.java

package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.dbcp2.BasicDataSource;

import dto.BoardDTO;

public class BoardDAO {
	ArrayList<BoardDTO> boards = new ArrayList<>();
	private BasicDataSource bds = new BasicDataSource();

	public BoardDAO() {
		bds.setUrl("jdbc:oracle:thin:@localhost:1521:xe");
		bds.setUsername("kedu01");
		bds.setPassword("kedu01");
		bds.setInitialSize(20);
	}
	private Connection getConnection() throws Exception{
		return bds.getConnection();
	}
	
	public boolean add(BoardDTO dto) throws Exception{
		String sql ="insert into board values(board_seq.nextval,?,?,?)";
		try(Connection con = this.getConnection();
				PreparedStatement pstat = con.prepareStatement(sql);){
			pstat.setString(1, dto.getWriter());
			pstat.setString(2, dto.getContents());
			pstat.setTimestamp(3, dto.getWrite_date());
			
			int result=pstat.executeUpdate();
			return result>0;
		}	
	}
	
	public List<BoardDTO> getAdd() throws Exception{
		String sql = "select*from board";
		try(Connection con = this.getConnection();
				PreparedStatement pstat = con.prepareStatement(sql);
				ResultSet result = pstat.executeQuery()){
			List<BoardDTO> list = new ArrayList<>();
			while(result.next()) {
				list.add(new BoardDTO(result.getInt("seq"),result.getString("writer"),
						result.getString("contents"),result.getTimestamp("write_date")));
			}
			return list;
		}
	}
	public List<BoardDTO> searchByWriter(String searchName) throws Exception{
		String sql = "select*from board where writer like ? or contents like ?";
		try(Connection con = this.getConnection();
				PreparedStatement pstat = con.prepareStatement(sql)){
			pstat.setString(1, "%"+searchName+"%");
			pstat.setString(2, "%"+searchName+"%");
			try(ResultSet rs=pstat.executeQuery();){
				List<BoardDTO> searchList=new ArrayList<>();
				while(rs.next()) {
					int seq = rs.getInt("seq");
					String writer = rs.getString("writer");
					String contents = rs.getString("contents");
					Timestamp write_date =rs.getTimestamp("write_date");
					searchList.add(new BoardDTO(seq, writer, contents, write_date));
				}
				return searchList;
			}
		}
	}
	public boolean checkId(int targetID) throws Exception{
		String sql = "select*from board where seq=?";
		try(Connection con = this.getConnection();
				PreparedStatement pstat = con.prepareStatement(sql)){
			pstat.setInt(1, targetID);
			try(ResultSet result = pstat.executeQuery()){
				if(result.next()) {
					return true;
				}
			}
		}
		return false;
	}
	public void updateById(int Seq, String writer, String contents, Timestamp write_date)throws Exception{
		String sql ="update board set writer=?, contents = ?, write_date=? where seq=?";
		try(Connection con = this.getConnection();
				PreparedStatement pstat = con.prepareStatement(sql);){
			pstat.setString(1, writer);
			pstat.setString(2, contents);
			pstat.setTimestamp(3, write_date);
			pstat.setInt(4, Seq);
			pstat.executeUpdate();
		}
	}
	
	
	public int deleteById(int targetID) throws Exception{
		String sql="delete from board where seq=?";
		try(Connection con = this.getConnection();
				PreparedStatement pstat = con.prepareStatement(sql)){
			pstat.setInt(1, targetID);
			int result = pstat.executeUpdate();
			return result;
		}
	}
}

 

MemberDTO.java

package dto;

import java.sql.Timestamp;

public class MemberDTO {
	private String id;
	private String pw;
	private String name;
	private Timestamp join_date;
	public MemberDTO() {};
	public MemberDTO(String id, String pw, String name, Timestamp join_date) {
		super();
		this.id = id;
		this.pw = pw;
		this.name = name;
		this.join_date = join_date;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getPw() {
		return pw;
	}
	public void setPw(String pw) {
		this.pw = pw;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Timestamp getJoin_date() {
		return join_date;
	}
	public void setJoin_date(Timestamp join_date) {
		this.join_date = join_date;
	}
	
	
	

	
}

 

MemberDAO.java

package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Timestamp;
import java.util.ArrayList;

import org.apache.commons.dbcp2.BasicDataSource;

import dto.MemberDTO;

public class MemberDAO {
	ArrayList<MemberDTO> members = new ArrayList<>();
	private static BasicDataSource bds = new BasicDataSource();

	public MemberDAO() {
		bds.setUrl("jdbc:oracle:thin:@localhost:1521:xe");
		bds.setUsername("kedu01");
		bds.setPassword("kedu01");
		bds.setInitialSize(20);
	}
	private Connection getConnection() throws Exception{
		return bds.getConnection();
	}
	
	public boolean login(String id, String pw) throws Exception {
		String sql = "select*from members where id =? and pw=?";
		
		try(Connection con = this.getConnection(); 
				PreparedStatement pstmt=con.prepareStatement(sql)){
			pstmt.setString(1,id);
			pstmt.setString(2, pw);
			try(ResultSet rs = pstmt.executeQuery()){
				return rs.next();
			}
		}
	}
	
	public boolean join(String newId, String newPw, String newName,Timestamp currentdate) throws Exception {
		String sql = "insert into members values(?,?,?,?)";
		try(Connection con = this.getConnection();
				PreparedStatement pstmt=con.prepareStatement(sql)){
			pstmt.setString(1, newId);
			pstmt.setString(2, newPw);
			pstmt.setString(3, newName);
			pstmt.setTimestamp(4, currentdate);
			int result = pstmt.executeUpdate();
			return result>0;
		}
	}
	
}

'2024_풀스택학원 > Back-end' 카테고리의 다른 글

[Java] JDBC_03_Login  (0) 2024.05.02
[Java] JDBC_02_Contact  (0) 2024.05.02
[Java] DBCP, TIMESTAMP  (0) 2024.05.02
[Database] 단일행 함수 / 그룹 함수  (0) 2024.04.28
[Database] Group by / Having  (0) 2024.04.28