JAVA
JAVA 주소록 관리 프로그램 개선
jmeen
2021. 8. 10. 17:52
728x90
기존에 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의 개념이 어렴풋이 정리는 되지만,
아직 이것을 이용해서 필요한것을 뽑아내는것은 많은 시도가 필요할 것 같다.