JAVA

JAVA 주소록 관리 프로그램 개선

jmeen 2021. 8. 10. 17:52
728x90

 

주소록 X 오라클

기존에 JAVA를 이용하여 주소록 관리 프로그램을 했었다.

JAVA 주소록 관리 프로그램 (tistory.com)

 

JAVA 주소록 관리 프로그램

JAVA 미니 프로젝트 : 주소록 관리 프로그램 * 조건 데이터는 텍스트로 관리한다. 데이터 구분은 , 로 한다. 저장 클래스 필드는 이름 , 핸드폰번호, 전화번호 출력 예시 1. 저장 클래스 생성 요구한

jaemin-lim.tistory.com

 

로컬저장소의 txt파일을 이용하여 읽고 쓰고를 했던 버전인데,

여기에 DB를 얹어보았다.

 

1. 생성CLASS

package com.java.miniproject;

public class PhoneBookVO {

	// 필드 작성
	private Long id;
	private String name;
	private String hp;
	private String tel;

	public PhoneBookVO() {
	}

	public PhoneBookVO(String name, String hp, String tel) {
		this.name = name;
		this.hp = hp;
		this.tel = tel;
	}

	public PhoneBookVO(long id, String name, String hp, String tel) {
		this.id = id;
		this.name = name;
		this.hp = hp;
		this.tel = tel;
	}

	public Long getId() {
		return id == null ? 0 : id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getName() {
		return name == null ? "" : name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getHp() {
		return hp == null ? "" : hp;
	}

	public void setHp(String hp) {
		this.hp = hp;
	}

	public String getTel() {
		return tel == null ? "" : tel;
	}

	public void setTel(String tel) {
		this.tel = tel;
	}

	@Override
	public String toString() {
		return "hpVO [id=" + id + ", name=" + name + ", hp=" + hp + ", tel=" + tel + "]";
	}
}

 

2. DAO 인터페이스 생성

package com.java.miniproject;

import java.util.List;

public interface PhoneBookDAO {
	public List<PhoneBookVO> getlist();

	public List<PhoneBookVO> search(String keyword);

	public boolean insert(PhoneBookVO vo);

	public boolean update(PhoneBookVO vo);

	public boolean delete(Long id);

}

3. DAO 인터페이스를 이용한 클래스 생성

package com.java.miniproject;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import com.javaex.jdbc.oracle.dao.AuthorVO;

public class PhoneBookDAOImpl implements PhoneBookDAO {

	private Connection getConnection() throws SQLException {
		Connection conn = null;
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			String dburl = "jdbc:oracle:thin:@127.0.0.1:1521:xe";
			conn = DriverManager.getConnection(dburl, "C##BITUSER", "bituser");
		} catch (ClassNotFoundException e) {
			System.err.println("드라이버 실패");
		}
		return conn;
	}

	@Override
	public List<PhoneBookVO> getlist() {
		List<PhoneBookVO> list = new ArrayList<>();
		Connection conn = null;
		Statement stmt = null;
		ResultSet rs = null;
		try {
			conn = getConnection();
			stmt = conn.createStatement();
			String sql = "SELECT id, name, hp, tel " + " FROM phone_book ORDER BY id";
			rs = stmt.executeQuery(sql);
			while (rs.next()) {
				long id = rs.getLong(1);
				String name = rs.getString(2);
				String hp = rs.getString(3);
				String tel = rs.getString(4);
				PhoneBookVO vo = new PhoneBookVO(id, name, hp, tel);
				list.add(vo);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				rs.close();
				conn.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return list;
	}

	@Override
	public List<PhoneBookVO> search(String keyword) {
		List<PhoneBookVO> list = new ArrayList<>();
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;

		try {
			conn = getConnection();
			String sql = "SELECT id, name, hp, tel FROM phone_book "
					+ "WHERE name LIKE ? ORDER BY id";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1,"%"+keyword+"%");
			rs=pstmt.executeQuery();
			
			while(rs.next()) {
				Long id = rs.getLong("id");
				String name = rs.getString("name");
				String hp = rs.getString("hp");
				String tel = rs.getString("Tel");
		
				PhoneBookVO vo = new PhoneBookVO(id,name,hp,tel);
				list.add(vo);
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				rs.close();
				pstmt.close();
				conn.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return list;
	}

	@Override
	public boolean insert(PhoneBookVO vo) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		int insertCount = 0;

		try {
			conn = getConnection();
			String sql = "INSERT INTO phone_book " + " VALUES(seq_phone_book.NEXTVAL,?,?,?)";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, vo.getName());
			pstmt.setString(2, vo.getHp());
			pstmt.setString(3, vo.getTel());

			insertCount = pstmt.executeUpdate();

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				pstmt.close();
				conn.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return 1 == insertCount;
	}

	@Override
	public boolean update(PhoneBookVO vo) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		int updateCount = 0;

		try {
			conn = getConnection();
			String sql = "UPDATE phone_book SET name =?, hp=?, tel=? WHERE id = ?";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, vo.getName());
			pstmt.setString(2, vo.getHp());
			pstmt.setString(3, vo.getTel());
			pstmt.setLong(4, vo.getId());
			updateCount = pstmt.executeUpdate();

		} catch (SQLException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				pstmt.close();
				conn.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return 1 == updateCount;
	}

	@Override
	public boolean delete(Long id) {

		Connection conn = null;
		PreparedStatement pstmt = null;
		int deleteCount = 0;

		try {
			conn = getConnection();
			String sql = "DELETE FROM phone_book WHERE id=?";
			pstmt = conn.prepareStatement(sql);
			pstmt.setLong(1, id);
			deleteCount = pstmt.executeUpdate();

		} catch (SQLException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				pstmt.close();
				conn.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return 1 == deleteCount;

	}
}

4. 실행파일

package com.java.miniproject;

import java.util.Iterator;
import java.util.List;
import java.util.Scanner;

public class contactManager {
	//  ORACLE DB를 활용하여 수정.
	public static void main(String[] args) {

		run();
	}
	
	private static void deletePhoneBook(Scanner sc) {
		System.out.print("번호 >> ");
		long id = sc.nextLong();
	
		PhoneBookDAO dao = new PhoneBookDAOImpl();
		boolean success = dao.delete(id);
		System.out.println("delete : " + (success ? "성공" : "실패"));
	}

	private static void listPhoneBook() {
		PhoneBookDAO dao = new PhoneBookDAOImpl();
		List<PhoneBookVO> list = dao.getlist();
		Iterator<PhoneBookVO> it = list.iterator();
		while (it.hasNext()) {
			PhoneBookVO vo = it.next();
			System.out.printf("%d\t%s\t%s\t%s%n", vo.getId(), vo.getName(), vo.getHp(), vo.getTel());
		}
	}

	private static void insertPhoneBook(Scanner sc) {
		System.out.print(">이름    : ");
		String name = sc.next();
		System.out.print(">휴대전화 : ");
		String hp = sc.next();
		System.out.print(">집전화   : ");
		String tel = sc.next();
		PhoneBookVO vo = new PhoneBookVO(name, hp, tel);
		PhoneBookDAO dao = new PhoneBookDAOImpl();
		boolean success = dao.insert(vo);
		System.out.println("Insert : " + (success ? "성공" : "실패"));
	}

	private static void updatePhoneBook(Scanner sc) {
		System.out.print("변경하고자하는 ID >>> ");
		long id = sc.nextLong();
		System.out.print(">이름    : ");
		String name = sc.next();
		System.out.print(">휴대전화 : ");
		String hp = sc.next();
		System.out.print(">집전화   : ");
		String tel = sc.next();

		PhoneBookVO vo = new PhoneBookVO(id, name, hp, tel);
		PhoneBookDAO dao = new PhoneBookDAOImpl();
		boolean success = dao.update(vo);
		System.out.println("update : " + (success ? "성공" : "실패"));

	}
	
	
	private static void searchPhoneBook(Scanner sc) {
		System.out.print("이름 >> ");
		String keyword  = sc.next();
		PhoneBookDAO dao = new PhoneBookDAOImpl();
		List<PhoneBookVO> list = dao.search(keyword);
		Iterator<PhoneBookVO> it = list.iterator();
		while (it.hasNext()) {
			PhoneBookVO vo = it.next();
			System.out.printf("%d\t%s\t%s\t%s%n", vo.getId(), vo.getName(), vo.getHp(), vo.getTel());
		}
	}

	private static void run() {
		boolean runx = true;
		int num = 0;
		String serchstr = "";
		System.out.println("***************************************");
		System.out.println("*          전화번호 관리 프로그램           *");
		System.out.println("***************************************");
		while (runx) {
			Scanner sc = new Scanner(System.in);
			System.out.println("1.리스트   2.등록   3.삭제   4.검색   5.종료");
			System.out.println("---------------------------------------");
			System.out.print("메뉴번호 >> ");
			num = sc.nextInt();

			switch (num) {
			case 1:
				System.out.println();
				System.out.println("<1. 리스트>");
				listPhoneBook();
				System.out.println();
				break;
			case 2:
				System.out.println();
				System.out.println("<2. 등록>");
				insertPhoneBook(sc);
				break;
			case 3:
				System.out.println();
				System.out.println("<3. 삭제>");

				deletePhoneBook(sc);
				break;
			case 4:
				System.out.println();
				System.out.println("<4. 검색>");
				searchPhoneBook(sc);
				System.out.println();
				break;
			case 5:
				System.out.println();
				System.out.println("***************************************");
				System.out.println("*              감사합니다                *");
				System.out.println("***************************************");
				sc.close();
				runx = false;
				break;
			default:
				System.out.println("[다시 입력해 주세요]");
				System.out.println();
			}
		}
	}
}

 

VO와 DAO의 개념이 어렴풋이 정리는 되지만, 

아직 이것을 이용해서 필요한것을 뽑아내는것은 많은 시도가 필요할 것 같다.