DB- 실습01- 연습편
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 해주었다.
댓글남기기