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 |