Address class


public class Address {
	private String sno;
	private String sname;
	private String stel;
	private String saddress;
	
	public String getSno() {
		return sno;
	}
	public void setSno(String sno) {
		this.sno = sno;
	}
	public String getSname() {
		return sname;
	}
	public void setSname(String sname) {
		this.sname = sname;
	}
	public String getStel() {
		return stel;
	}
	public void setStel(String stel) {
		this.stel = stel;
	}
	public String getSaddress() {
		return saddress;
	}
	public void setSaddress(String saddress) {
		this.saddress = saddress;
	}
	
	@Override
	public String toString() {
		return "Address [sno=" + sno + ", sname=" + sname + ", stel=" + stel + ", saddress=" + saddress + "]";
	}
	
}

Main


public class Main {

	public static void main(String[] args) throws SQLException {
		//Connection CON=Database.CON;
		
		AddressConsole console = new AddressConsole();
		AddressService service =new AddressService();
		Address a = new Address();

		EXIT:
			while(true) {
				int menu = console.inputAddressMenu();
				
				switch(menu) {
				case 1: ///주소등록
					console.insertAddress(a);
					break; 
				case 2: //주소목록
					console.listAddress();
					break;
				case 3: //주소검색
					console.seachAddress();
					break;
				case 4: //주소삭제
					console.deleteAddress(null);
					break;
				case 0 : //종료
					System.out.println("프로그램종료!");
					break EXIT;
				default:
					System.out.println("0~4번메뉴를 선택하세요!");
		
				}
			}
	}

}

한번 해보고 싶었던 작업인데 메인을 아주보기좋게 줄여봤다.

Console 클래스가 따로있고 service 클래스에서 쿼리문을 담당한다.

AddressConsole


public class AddressConsole {
	
	private AddressService service;
	private Address a;
	
	public AddressConsole() { 
		service = new AddressService();
		a = new Address();

	}

	public int inputAddressMenu() {
		Scanner scan = new Scanner(System.in);
		System.out.println("");
		System.out.println("┌──────────────────────┐");
		System.out.print("│1.주소등록  ");
		System.out.print("2.주소목록  ");
		System.out.print("3.주소검색  ");
		System.out.print("4.주소삭제  ");
		System.out.print("0.종료    │\n");
		System.out.println("└──────────────────────┘");
		System.out.print("선택>");
		int menu = scan.nextInt();
		
		return menu;
	}

	public void insertAddress(Address a) throws SQLException {
		Scanner scan = new Scanner(System.in);
		System.out.print("학번>"); a.setSno(scan.nextLine());
		System.out.print("이름>"); a.setSname(scan.nextLine());
		System.out.print("전화번호>"); a.setStel(scan.nextLine());
		System.out.print("주소>"); a.setSaddress(scan.nextLine());
		service.insert(a);
		return;
	}

	public void listAddress() throws SQLException {
		ArrayList<Address> array = service.list();
		for(Address d:array) {
			System.out.printf("%s\t%s\t%s\t%s\n", 
					d.getSno(), d.getSname(), d.getStel(),d.getSaddress()); 
		}
	}

	public void seachAddress() throws SQLException {
		Scanner scan = new Scanner(System.in);
		System.out.print("학번>"); String sno = scan.nextLine();
		a=service.read(sno);
		if(a.getSname()== null) {
			System.out.println("해당학생이없습니다.");
		}else {
			System.out.println("성명:"+a.getSname());
			System.out.println("전화:"+a.getStel());
			System.out.println("주소:"+a.getSaddress());
		}
	}

	public void deleteAddress(String sno ) throws SQLException {
		Scanner scan = new Scanner(System.in);
		System.out.print("삭제할 학번>");  sno = scan.nextLine();
		a=service.read(sno);
		if(a.getSname()==null) {
			System.out.println("해당학생이없습니다.");
		}else {
			System.out.println("성명:"+a.getSname());
			System.out.println("전화:"+a.getStel());
			System.out.println("주소:"+a.getSaddress());
			service.delete(sno);
			}
		}
		
	}
	

service 와 a 는 전역변수를 줘서 전체에서 사용할수있게했다. Console -> service 로 연결될것이다.

AddressService


주소 입력


//주소 입력
	public void insert(Address a)  {
		try {
		String sno = a.getSno();
		String sname = a.getSname();
		String stel = a.getStel();
		String saddress = a.getSaddress();	
		
		String sql = "insert into tbl_address(sno,sname,stel,saddress) values(?,?,?,?)";
		PreparedStatement ps = Database.CON.prepareStatement(sql);
		ps.setString(1, sno);
		ps.setString(2, sname);
		ps.setString(3, stel);
		ps.setString(4, saddress);
		ps.executeUpdate();
		System.out.println("주소등록완료!");
		}catch(Exception e){
			System.out.println("list오류 :"+e.toString());
		}
	}

주소 입력부분이다. 밑에 입력하는 부분에 보기좋게해주려고 변수를 줘서 앞에 선언하였다. 입력 sql문이고 4개의 값을 받는다.


주소목록

public ArrayList<Address> list()  {
		ArrayList<Address> list = new ArrayList<>();
		try {
			String sql = "select * from tbl_address";
			PreparedStatement ps = Database.CON.prepareStatement(sql);
			ResultSet rs = ps.executeQuery();
			
			while(rs.next()) {
				Address a= new Address();
				a.setSno(rs.getString("sno"));
				a.setSname(rs.getString("sname"));
				a.setStel(rs.getString("stel"));
				a.setSaddress(rs.getString("saddress"));
				list.add(a);
			}
					
		}catch(Exception e){
			System.out.println("list오류 :"+e.toString());
		}
		return list;
	}

AraayList를 사용해서 출력할것이다. tbl_address모든 것을 출력할것이고 while 문에서 차례대로 꺼내오고 어레이에 담아준다. 그리고 return 어레이를 꼭해줘야한다.


주소검색

public Address read(String sno) throws SQLException {
		Address a= new Address();
		String sql = "select * from tbl_address where sno=?";
		PreparedStatement ps = Database.CON.prepareStatement(sql);
		ps.setString(1, sno);
		ResultSet rs = ps.executeQuery();
		if(rs.next()) {
			a.setSno(rs.getString("sno"));
			a.setSname(rs.getString("sname"));
			a.setStel(rs.getString("stel"));
			a.setSaddress(rs.getString("saddress"));
		}
		
		return a;
	}

여기서 예외처리는 던지는것으로 처리했다. sno 에 있는 값을 비교한다.


주소 삭제

	public void delete(String sno) {
		try {
			String sql = "delete from tbl_address where sno=?";
			PreparedStatement ps = Database.CON.prepareStatement(sql);
			ps.setString(1, sno);
			ps.execute();
			System.out.println("주소삭제완료!");
		} catch(Exception e) {
			System.out.println("delete 오류 :" +e.toString());
		}
		
	}
	

여기서 에러가 떠서 구글링을 해보니까 엉뚱한 테이블이 잡혀있었다. select CONSTRAINT_NAME, TABLE_NAME, R_CONSTRAINT_NAME from user_constraints where CONSTRAINT_NAME = ‘오류번호’ ;
이명령어를 통해 어떤 테이블인지 알아내고 drop 해주었다.

태그:

카테고리:

업데이트:

댓글남기기