국비지원학원/Java

53일차

초코맛 2019. 1. 17. 01:44
반응형
*Statement
Statement
: 쿼리문을 모른다.(쿼리문이 실행될때 쿼리문을 알게된다.)
실행할 때마다 쿼리문이 매번 생성되어 실행된다.
bind변수 x
SQL Injection이 발생할 수 있다.
(매년 거의 1위하는 공격)
항상느린것은 아니고, 쿼리문이 한번만(적은 횟수로) 실행될때 얘가 더빨라진다.
총한번을 쏘기 위해 다 하나하나 조립해 쏘는거고



공통 : 
자바코드에서 쿼리문 작성 에는 ;(세미콜론) 을 넣지 않는다!  넣으면 Error
PreparedStatement
: 쿼리문을 안다.(객체가 얻어질 때 부터)
쿼리문은 미리 생성되어있고, 값만 넣어서 실행한다.
bind변수 존재
SQL Injection이 발생할 수 없다.
쿼리문이 반복실행 될때 속도가 빠르다.
탄창만 넣어서 쏘는것으로 훨씬 빠름.




CallableStatement
: Procedure실행


*Statement 사용법
  • 얻기
    • Statement stmt =con.createStatement(); //이문장 어디에도 쿼리문이 들어가 있지않다. 그래서 모른다.
  • insert,update,delete
    • insert는 무조건 한 행 추가 되었거나 예외
    • update,delete는 0~n개의 행이 변경또는 삭제
    • int cnt = stmt.executeUpdate(""sql");
  •  
 



1.드라이버 로딩(DB client : QuaumDB)
    Class.forName("Oracle.jdbc.OracleDriver");
2.Connection 얻기
background service : os랑 같이 돌아 컴퓨터가 키는게 느려질수 있다.(ssd는 영향ㄴ)
    String url="jdbc:Oracle:thin:@ip:1521/*port*/:orcl/*SID*/";
    String id ="scott";   //my 는 root ms 는 sa
    String pass="tiger";
Connection con = DriverManager.getConnection(url,id,pass);
auto commit이 기본설정이라 해제해야만 따로처리가능(setAutoCommit(false); 로 해제)
id와 pass를 인증하여 되돌아온다.

3.쿼리문 생성객체를 얻는다.
    Statement stmt=con.createStatement();
4.쿼리문 수행후 결과 얻기
    DEPT->insert
    int deptno=90;
    String dname="댄스부";
    String loc="구로구";
    
    String sql="insert into dept(deptno,dname,loc)
                     values("+deptno+",'"+dname+"','"+loc+"')";
    int cnt = stmt.executeUpdate(sql);
5.연결 끊기 
    stmt.close();
    con.close();


+StatementCRUD

+insertCpDept(CpDeptVo):void
throws SQLException
//VO(value object)를 많이쓴다.
+updateCpDept(CpDeptVo):boolean
trowsSQLException
+deleteCpDept(int) : boolean
trows SQLException
+selectAllCpDept(): List<CpDeptVO>
+selectOneCpDept(int/*부서번호*/): OneCpDeptVO
|                                      |                                   |
+CpDeptVO
+OneCpDeptVO
+RunStatement(Rul)
-int deptno
-String dname,loc
-String dname,loc

+Constructor()
+getter()
+setter()

+static main(String[]) : void



<JVM>port=====port<Client-DB-Table>
ResultSet rs=stmt.executeQuery("sql");
    while(rs.next()){
        int deptno=rs.getInt("deptno"); //10 20
        String dname=rs.getString("dname");//개발 유지
        String loc =rs.getString("loc");//서울 대전
    }//end while
//무한루프로 돌고
//리스트에 데이터형이 여러개인 타입이 여려개 들어가게 된다.


CpDeptVo cdv=null;
while(rs.next()){
    cdv=new CpDeptVO(rs.getInt("deptno");
    rs.getString("dname");
    rs.getString("loc");
    list.add(cdv);
}


*Statement 사용법2
  • select(조회!는 위와 조금 다르다)
    • <db는 아무것도 갖지 않았는데?제어권을 받아옴??
    • <커서의 제어권을 받기도 하지만 dev와 자바간의 데이터 변환의 일도 한다.(ex\db의 number 가 java에는 없으므로 그데이터형을 변환)
    • <0번부터 시작하긴 해 근데 처음을  커서가 가짐...그래서1번


package day0104;
public class CpDeptVO {
     private int deptno;
     private String dname, loc;
     
     public CpDeptVO() {
     }
     public CpDeptVO(int deptno, String dname, String loc) {
           this.deptno = deptno;
           this.dname = dname;
           this.loc = loc;
     }
     public int getDeptno() {
           return deptno;
     }
     public String getDname() {
           return dname;
     }
     public String getLoc() {
           return loc;
     }
     
}//class
package day0104;
public class OneCpDeptVO {
     private String dname,loc;
     public OneCpDeptVO() {
     }
     public OneCpDeptVO(String dnama, String loc) {
           this.dname = dnama;
           this.loc = loc;
     }
     public String getDname() {
           return dname;
     }
     public String getLoc() {
           return loc;
     }
//저장되는 값이 다르면 무조건 VO를 새로 만든다.
//개발자의 실수로 값을 넣어버리는경우가 발생할수있어서!
}//class
package day0104;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import javax.jws.soap.SOAPBinding.Use;
import oracle.jdbc.driver.DMSFactory;
/**
* Statement객체를 사용하여 CRUD를 구현하는 클래스
* CRUD는 Create Read Update Delete 의 약자.
*  
* @author owner
*/
public class UseStatementCRUD {
     /**
      * VO를 입력받아 VO의 값을 CP_DEPT테이블에 추가
      * @param cdvo 부서번호,부서명,위치를 가진 VO
      * @throws SQLException
      */
     public void insertCpDept(CpDeptVO cdvo) throws  SQLException{
           //1.드라이버 로딩
           try {
                Class.forName("oracle.jdbc.OracleDriver");
           } catch (ClassNotFoundException e) {
                e.printStackTrace();
           }//end catch
           
           Connection con=null;
           Statement stmt=null;
           
           try { //여기서부터는 연결을 반드시 끊어 주어야 한다.
           //2.Connection 얻기  
                String  url="jdbc:oracle:thin:@127.0.0.1:1521:orcl";//<반드시 잘  알아두어야 한다.외워~!
                String id="scott";
                String pwd="tiger";
                
                con=DriverManager.getConnection(url, id, pwd);
           //3.쿼리문 생성객체 얻기
                stmt=con.createStatement();
           //4.쿼리수행 후 결과 얻기
//              String insertCpdept="insert into  cp_dept(deptno,dname,loc) values("+
//                                        cdvo.getDeptno()+",'"+cdvo.getDname()+"','"+cdvo.getLoc()+"')";//오라클의 문자열은 '로 묶여야 한다.
//              insertCpDept.append(str);
                StringBuilder insertCpDept=new StringBuilder();
                insertCpDept.append("insert into  cp_dept(deptno,dname,loc) values(")
                .append(cdvo.getDeptno()).append(",'")
                .append(cdvo.getDname()).append("','")
                .append(cdvo.getLoc()).append("')");
                
                int  cnt=stmt.executeUpdate(insertCpDept.toString());
                System.out.println(cnt);//성공 아님 예외
                
           }finally {
                //5.연결 끊기
                if(stmt!=null) {stmt.close(); }//end if
                if(con!=null) {con.close(); }//end if
           }//end finally
           
     }//insertCpDept
     public boolean updateCpDept(CpDeptVO cdvo) throws  SQLException{
           boolean flag = false;
           //1.드라이버 로딩
           try {
                Class.forName("oracle.jdbc.OracleDriver");
           } catch (ClassNotFoundException e) {
                e.printStackTrace();
           }//end catch
           Connection con=null;
           Statement stmt=null;
           try {
           //2.Connection 얻기
                String  url="jdbc:oracle:thin:@127.0.0.1:1521:orcl";
                String id="scott";
                String pwd="tiger";
                con=DriverManager.getConnection(url, id, pwd);
           //3.쿼리문 생성객체 얻기
                stmt=con.createStatement();
           //4.쿼리문 수행후 결과 얻기
                StringBuilder updateCpDept=new StringBuilder();
                updateCpDept
                .append("update cp_dept set ")
                .append("dname='").append(cdvo.getDname()).append("',")
                .append("loc='").append(cdvo.getLoc()).append("'  ")
                .append("where  deptno=").append(cdvo.getDeptno());
                
                int  cnt=stmt.executeUpdate(updateCpDept.toString());
                //테이블의 구조상 부서번호는 PK이므로 한 행만  변경된다.(그렇지않으면 여러행)
                if(cnt!=0) {//바뀐게 여러개란 얘기
                     flag=true;
                }//end if
           }finally {
                //5.연결 끊기
                if(stmt!=null) {stmt.close(); }//end if
                if(con!=null) {con.close(); }//end if
           }//end finally
           
           return flag;
     }//updateCpDept
     public boolean deleteCpDept(int deptno) throws  SQLException{
           boolean flag=false;
           //1.드라이버 로딩
           try {
                Class.forName("oracle.jdbc.OracleDriver");
           } catch (ClassNotFoundException e) {
                e.printStackTrace();
           }//end catch
           
           Connection con =null;
           Statement stmt =null;
           try {
           //2.Connection 얻기
                String  url="jdbc:oracle:thin:@127.0.0.1:1521:orcl";
                String id="scott";
                String pwd="tiger";
                con=DriverManager.getConnection(url, id, pwd);
           //3.쿼리문 생성 객체 얻기
                stmt=con.createStatement();
           //4.쿼리 수행 후 결과 얻기
                StringBuilder deleteCpDept=new StringBuilder();
                deleteCpDept.append("delete from cp_dept where  deptno=").append(deptno);
                int  cnt=stmt.executeUpdate(deleteCpDept.toString());
                if(cnt==1) {//cnt !=0 도 상관없다.
                     flag=true;
                }//end if
                
           }finally {
                //5.연결 끊기
                if(stmt !=null) {stmt.close();}//end if
                if(con !=null) {con.close();}//end if
           }//end finally
           
           return flag;
     }//deleteCpDept
     
     public List<CpDeptVO> selectAllCpDept() throws  SQLException{
           List<CpDeptVO> list=new ArrayList<CpDeptVO>();
           //1.드라이버 로딩
           try {
                Class.forName("oracle.jdbc.OracleDriver");
           } catch (ClassNotFoundException e) {
                e.printStackTrace();
           }//end catch
           
           Connection con=null;
           Statement stmt=null;
           ResultSet rs=null;
           try {
           //2.Connection 얻기
                String  url="jdbc:oracle:thin:@127.0.0.1:1521:orcl";
                String id="scott";
                String pwd="tiger";
                con=DriverManager.getConnection(url, id, pwd);
           //3.쿼리문 생성 객체 얻기
                stmt=con.createStatement();
           //4.쿼리문 수행 후 결과 얻기
                String selectCpDept="select deptno,dname,loc  from cp_dept";
                
                rs=stmt.executeQuery(selectCpDept);//제어권을  가짐
                CpDeptVO cdvo=null;
                
                while(rs.next()) {//조회된 레코드가 존재한다면
                     //컬럼의 인덱스로 조회    가능하지만 뭐를  가져오는지 알수 없어서 비추천
//                   System.out.println(rs.getInt(1)+"/"+rs.getString(2)+"/"+rs.getString(3));//<가독성이 떨어짐.인덱스를 써서 출력하는것은 정확한  인덱스를 알아야하고 ..
                     //컬럼명으로 조회
//                   System.out.println(rs.getInt("deptno")+"  "+rs.getString("dname")+" "+rs.getString("loc"));
                     //<프로시져할때는 어쩔수없이 인덱스로 쓰지만  그외에는 다 컬럼명으로 조회!
                     
                     cdvo=new  CpDeptVO(rs.getInt("deptno"),rs.getString("dname"),rs.getString("loc"));
                     //<데이터가 있을때에만 객체 생성?
                     //같은 이름으로 생성된 cdvo객체를  사라지지않도록 관리하기 위해 List에 추가
                     list.add(cdvo);//이코드가 없으면 cdvo는  마지막 값만 가진다.
                     
                }//end while
                
           }finally {
                //5.연결 끊기
                if(rs!=null) {rs.close();}//end if
                if(stmt!=null) {stmt.close();}//end if
                if(con!=null) {con.close();}//end if
           }
           return list;
     }//selectAllCpDept
     
     public OneCpDeptVO selectCpDept(int deptno) throws  SQLException {
           OneCpDeptVO ocdvo=null;
           //1.드라이버 <로딩>
           try {
                Class.forName("oracle.jdbc.OracleDriver");
           } catch (ClassNotFoundException e) {
                e.printStackTrace();
           }//end catch
           
           //빼먹음
           Connection con=null;
           Statement stmt=null;
           ResultSet rs=null;
           
           try {
           //2.Connection 얻기
                String  url="jdbc:oracle:thin:@127.0.0.1:1521:orcl";
                String id="scott";
                String pwd="tiger";
                con=DriverManager.getConnection(url, id, pwd);
           //3.쿼리문 생성 객체 얻기
                stmt=con.createStatement();
           //4.쿼리 <수행후> 결과 얻기
                StringBuilder selectCpDept=new StringBuilder();
                selectCpDept.append("select dname,loc from  cp_dept where deptno=")
                .append(deptno);
                
                rs=stmt.executeQuery(selectCpDept.toString());
                
                if(rs.next()) {//조회된 레코드가 존재 한다면   //<<어짜피 레코드는 하나이므로 while이 아니라 if 로 해도 된다.한개  또는 0개라면 rs.next();만 쓰기에는 되게 위험 (있지도않은데  가져오려고 하면 Error)
                     ocdvo=new  OneCpDeptVO(rs.getString("dname"),rs.getString("loc"));
                }//end while
                
           }finally {
                //5.연결 끊기
                if(rs!=null) {rs.close();}//end if
                if(stmt!=null) {stmt.close();}//end if
                if(con!=null) {con.close();}//end if
           }//end finally
           
           return ocdvo;
     }//selectCpDept
     
     /**
      * CP_DEPT 테이블의 모든 부서번호를 조회
      * @return
      * @throws SQLException
      */
     public List<Integer> selectAllCpDeptNo() throws  SQLException{
           List<Integer> list=new ArrayList<Integer>();
           //1.
           try {
                Class.forName("oracle.jdbc.OracleDriver");
           } catch (ClassNotFoundException e) {
                e.printStackTrace();
           }
           Connection con=null;
           Statement stmt=null;
           ResultSet rs=null;
           
           try {
           //2.
                String  url="jdbc:oracle:thin:@127.0.0.1:1521:orcl";
                String id="scott";
                String pwd="tiger";
                con=DriverManager.getConnection(url, id, pwd);
           //3.
                stmt=con.createStatement();
           //4.
                StringBuilder selectDeptNo=new StringBuilder();
                selectDeptNo.append("select deptno from cp_dept  order by deptno");
                
                rs=stmt.executeQuery(selectDeptNo.toString());
                
                while(rs.next()) {//조회된 레코드가 존재 한다면   //<<어짜피 레코드는 하나이므로 while이 아니라 if 로 해도 된다.한개  또는 0개라면 rs.next();만 쓰기에는 되게 위험 (있지도않은데  가져오려고 하면 Error)
                     list.add(Integer.parseInt(rs.getString("deptno")));//autoboxing이 되서 Integer.parseInt 대신 new Integer가능?
                }//end while
           }finally {
                //5.
                if(rs!=null) {rs.close();}//end if
                if(stmt!=null) {stmt.close();}//end if
                if(con!=null) {con.close();}//end if
           }
           return list;
     }//selectAllCpDeptNo
}//class
package day0104;
import java.awt.Font;
import java.awt.HeadlessException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.border.TitledBorder;
public class RunUseStatementCRUD {
     
     private UseStatementCRUD us_crud;
     
     public RunUseStatementCRUD() {
           us_crud=new UseStatementCRUD();
     }//RunUseStatementCRUD
     public void addCpDept() {
           String tempData=JOptionPane.showInputDialog("부서  정보 추가 \n입력 예)부서번호,부서명,위치");
           if(tempData!=null && !tempData.equals(""))  {//데이터가 있다면  null.equals이니까 후항은 실행되지 않아서  Error발생하지 않는다.
                String[] data=tempData.split(",");
                if(data.length!=3) {//잘못들어간 데이터
                     JOptionPane.showMessageDialog(null,  "입력형식을 확인해 주세요.");
                     return;
                }//end if
                
                int deptno=0;
                String dname="";
                String loc="";
                
                try {
                     deptno=Integer.parseInt(data[0]);
                     dname=data[1];
                     loc=data[2];
                }catch (NumberFormatException nfe) {
                     JOptionPane.showMessageDialog(null,  "부서번호는 숫자입니다.");
                     return;
                }//end catch
                
                //처리된 입력데이터를 VO에 설정하고
                CpDeptVO cdvo=new CpDeptVO(deptno,dname,loc);
                //VO의 값을 DB에 insert한다.
                
                try {
                     us_crud.insertCpDept(cdvo);//추가성공
                     JOptionPane.showMessageDialog(null,  deptno+"번 부서정보 추가");
                } catch (SQLException se) {//예외
                     
                     String errMsg="";
                     switch (se.getErrorCode()) {
                     case 1:    errMsg=deptno+"번 부서는 이미  존재합니다."; break;
                     case 1438: errMsg="부서 번호는 두자리  입니다."; break;//업데이트할때에도 나온다.
                     case 12899:     errMsg="부서명이나 위치가  너무 깁니다."; break;
                     default: errMsg="뎨둉합니다.시스템에 문제가  발생했습니다. 잠시 후 다시 시도해 주세요.";  
                     }//end switch
                     JOptionPane.showMessageDialog(null,  errMsg);
                     se.printStackTrace();
                }//end catch
           }//end if
     }//addCpDept
     
     public void modifyCpDept() {
           String tempData=JOptionPane.showInputDialog("부서  정보 변경 \n부서번호에 일치하는 부서명과 위치를 변경합니다.\n입력  예)부서번호,부서명,위치");
           if(tempData!=null && !tempData.equals(""))  {//데이터가 있다면  null.equals이니까 후항은 실행되지 않아서  Error발생하지 않는다.
                String[] data=tempData.split(",");
                if(data.length!=3) {//잘못들어간 데이터
                     JOptionPane.showMessageDialog(null,  "입력형식을 확인해 주세요.");
                     return;
                }//end if
                
                int deptno=0;
                String dname="";
                String loc="";
                
                try {
                     deptno=Integer.parseInt(data[0]);
                     dname=data[1];
                     loc=data[2];
                }catch (NumberFormatException nfe) {
                     JOptionPane.showMessageDialog(null,  "부서번호는 숫자입니다.");
                     return;
                }//end catch
                
                //처리된 입력데이터를 VO에 설정하고
                CpDeptVO cdvo=new CpDeptVO(deptno,dname,loc);
                //VO의 값을 DB에 update한다.
                
                try {
                     //변경은 성공/실패/예외 3개
                     String msg="";
                     if(us_crud.updateCpDept(cdvo)) {//변경된  레코드가 존재
                           msg=deptno+"번 부서의 정보를  변경하였습니다.";
                     }else{//변경된 레코드가 존재하지 x
                           msg=deptno+"번 부서는 존재하지  않습니다.";
                     }//end else
                     JOptionPane.showMessageDialog(null, msg);
                     
                } catch (SQLException se) {//예외
                     
                     String errMsg="";
                     switch (se.getErrorCode()) {
                     case 12899:     errMsg="부서명이나 위치가  너무 깁니다."; break;
                     default: errMsg="뎨둉합니다.시스템에 문제가  발생했습니다. 잠시 후 다시 시도해 주세요.";  
                     }//end switch
                     JOptionPane.showMessageDialog(null,  errMsg);
                     se.printStackTrace();
                }//end catch
           }//end if
     }//modifyCpDept
     
     public void removeCpDept() {
           String inputData=JOptionPane.showInputDialog("부서  삭제\n삭제할 부서번호 입력");
           if(inputData !=null && !inputData.equals("")) {
                int deptno=0;
                
                try {
                     deptno=Integer.parseInt(inputData);
                }catch (NumberFormatException nfe) {
                     JOptionPane.showMessageDialog(null,  "부서번호는 숫자이어야 합니다.");
                     return;
                }//end catch
                
                try {
                     String msg=deptno+"번 부서는 존재하지  않습니다.";
                     
                     if(us_crud.deleteCpDept(deptno)) {
                           msg=deptno+"번 부서번호를  삭제하였습니다.";
                     }//end if
                     
                     JOptionPane.showMessageDialog(null, msg);
                     
                } catch (SQLException se) {
                     JOptionPane.showMessageDialog(null,  "죄송합니다. 문제가 발생하였습니다.");
                     se.printStackTrace();
                }//end catch
           }//end if
     }//searchAllCpDept
     
     public void searchAllCpDept() {
           
           StringBuilder viewCpDept=new StringBuilder();
           viewCpDept
          .append("------------------------------------------------------")
          .append("------------------------------------------------------\n")
           .append("번호\t부서번호\t부서명\t위치\n")
          .append("------------------------------------------------------")
          .append("------------------------------------------------------\n");
           
           int rowCount=0;
           try {
                List<CpDeptVO> list= us_crud.selectAllCpDept();
                CpDeptVO cdv=null;
                
                rowCount=list.size();
                for(int i=0; i<list.size(); i++) {
                     cdv=list.get(i);
                     viewCpDept
                     .append(i+1).append("\t")
                     .append(cdv.getDeptno()).append("\t")
                     .append(cdv.getDname()).append("\t")
                     .append(cdv.getLoc()).append("\n");
                }//end for
                
                if(list.isEmpty()) { //list.size()==0
                     viewCpDept.append("입력된 부서정보가  존재하지 않습니다.\n");
                }//end if
                
           }catch (SQLException e) {
                viewCpDept.append("DBMS에서 문제가  발생하였습니다. ㅈㅅㅈㅅ\n");
                e.printStackTrace();
           }//end catch
           
          viewCpDept.append("------------------------------------------------------")
          .append("------------------------------------------------------\n")
           .append("\t\t\t총").append(rowCount).append("개의  부서정보가 조회되었습니다.");
           
           JTextArea jta=new JTextArea(20,50);
           jta.setEditable(false);//입력방지
           jta.setText(viewCpDept.toString());//만들어진  출력데이터를 T.A에 설정한다.
           
           JScrollPane jsp=new JScrollPane(jta);
           jsp.setBorder(new TitledBorder("전체 부서 조회  결과"));
           JOptionPane.showMessageDialog(null, jsp);
           
     }//searchAllCpDept
     
     public void searchOneCpDept() {
           
           String inputData=JOptionPane.showInputDialog("부서  조회 \n조회할 부서번호를 입력해 주세요.");
           if(inputData!=null && !inputData.equals("")) {
                try {
                     int deptno=Integer.parseInt(inputData);
                     //부서번호를 입력하여 부서번호에 해당하는  부서정보를 조회   <하고 뿌릴것.
                     //조회한 부서가 있다면 생성된 객체가  반환되고 조회된 부서가 없다면 null이 반환된다.
                     OneCpDeptVO ocd_vo=  us_crud.selectCpDept(deptno);
                     
                     
                     StringBuilder viewData=new  StringBuilder();
                     viewData.append("부서명 :  ").append(ocd_vo.getDname())//여기서 nullpointerException이  발생하는것.
                     .append(", 위치 :  ").append(ocd_vo.getLoc());
                     
                     JLabel lbl=new  JLabel(viewData.toString());
                     lbl.setFont(new Font("SansSerif",  Font.BOLD, 15));
                     
                     JOptionPane.showMessageDialog(null, lbl);
                     
//                   us_crud.selectAllCpDeptNo()//[1,20,30]//위에서 한번에 try  catch하는 줄알았는데 ..아님.
//                   StringBuilder allDeptno=new  StringBuilder();
//                   List<Integer> allDeptnolist=new  ArrayList<Integer>();
//                   for(Integer i/*변수명!!*/ : allDeptnolist)  {
//                        allDeptno.append(i.intValue()).append(" ");//출력인데?
//                   }//end for
                     
                }catch (NullPointerException npe) {
                     StringBuilder allDeptno=new  StringBuilder();
//                   JOptionPane.showMessageDialog(null,  inputData+"번호의 부서는 존재하지 않습니다.");
                     //존재하는 부서번호를 제공하고 싶다.
                     try {
                           List<Integer>  allDeptnolist=us_crud.selectAllCpDeptNo();
                           for(Integer i/*변수명!!*/ :  allDeptnolist) {//리스트의 값을 정제해 문자열로 한번에 만들어  출력해줌.
                                allDeptno.append(i.intValue()).append(" ");
//                              System.out.println(i.intValue());
                           }//end for
                           JOptionPane.showMessageDialog(null,  inputData+"번호의 부서는 존재하지 않습니다.\n"+"현재 존재하는  부서는 "+us_crud.selectAllCpDeptNo()+"번 입니다.");
                           JOptionPane.showMessageDialog(null,  allDeptno+"번 부서만 존재합니다.");
                     } catch (HeadlessException e) {
                           e.printStackTrace();
                     } catch (SQLException e) {
                           e.printStackTrace();
                     }//end catch
                     
                }catch (NumberFormatException nfe) {
                     JOptionPane.showMessageDialog(null,  "부서번호는 정수형태로 입력하셔야 합니다.");
                }catch (SQLException e) {
                     JOptionPane.showMessageDialog(null,  "DB서버에서 문제가 발생했습니다.");
                     e.printStackTrace();
                }//end catch
           }//end if
     }//searchOneCpDept
     
     //DAO라고도 하는데 Data access object DB에 관련된 업무 처리  클래스
     
     public static void main(String[] args) {
           RunUseStatementCRUD rus_crud=new  RunUseStatementCRUD();
           
           boolean exitFlag=false;
           String inputMenu="";
           do {
                inputMenu=JOptionPane.showInputDialog("메뉴선택\n1.부서추가  2.부서변경 3.부서삭제 4.전체부서조회 5.특정부서조회 6.종료");
                if (inputMenu!=null/* &&  !inputMenu.equals("")*/) {
                     switch (inputMenu) {//JDK 1.7이상부터  문자열 비교 가능
                     case "1":
                           rus_crud.addCpDept();
                           break;
                     case "2":
                           rus_crud.modifyCpDept();
                           break;
                     case "3":
                           rus_crud.removeCpDept();
                           break;
                     case "4":
                           rus_crud.searchAllCpDept();
                           break;
                     case "5":
                           rus_crud.searchOneCpDept();
                           break;
                     case "6":
                           exitFlag=true;
                           break;
     
                     default:
                           JOptionPane.showMessageDialog(null,  inputMenu+"는 제공되는 서비스가 아닙니다.");
                           break;
                     }//end switch
                }else{
                     exitFlag=true;
                }//end if
                
           }while(!exitFlag);
           JOptionPane.showMessageDialog(null, "사용해 주셔서  감사합니다.");
           
     }//main
}//class

 

반응형

'국비지원학원 > Java' 카테고리의 다른 글

55~57일차  (0) 2019.01.20
54일차  (0) 2019.01.19
51~52일차  (0) 2019.01.16
47일차~50일차  (0) 2019.01.15
44~46일차  (0) 2019.01.14