Web develop/JDBC_XML

[JDBC] Properties MVC 사용예제 (+Swing)

ForA 2019. 6. 18. 23:56
728x90

파일 구성

Control : Controller.java

Model : PersonDTO.java , PersonDAO.java

View : InputForm.java, MainView.java, UpForm.java

Conn 폴더 : conn.properties


MODEL

  • 테이블 이름, 혹은 조인된 도메인명 오른쪽에 역할 명시

PersonDTO

: 속성 정의, 자바빈즈 역할

public Person(int no, String name, int age, String job) {
        this.no = no;
        this.name = name;
        this.age = age;
        this.job = job;
    }

PersonDAO

: DB 관련된 일 전담

  • CRUD 작성 (CREATE, READ, UPDATE, DELETE)
  1. Connection 작업
  2. Statement stmt 객체생성 (sql 작성, 실행)
    ResultSet rs 객체생성 (조회된 결과 저장)
    rs.next() rs.get자료형('컬럼명')
  3. DB자원반환 (Connection 반환)

PersonDAO:: DB Connect , disConnect

    private void connect() {
          try {
            conn = DriverManager.getConnection(pro.getProperty("url"),pro);
        } catch (SQLException e) {
            e.printStackTrace();
        }   
      }//connect

      private void disConnect() {
          try {
                //연결끊기(DB자원반환)
                if(conn != null)conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
    }//disconnect
    }

PersonDAO:: 객체생성

    Connection conn;
    Statement  stmt;

    Properties pro;

    public PersonDAO() {
       try {
        pro = new Properties();    //속성 무
           pro.load(new FileReader("conn/conn.properties"));//속성 4개 적재            
           Class.forName(pro.getProperty("driver"));

       } catch (Exception e) {
        e.printStackTrace();
      }
    }//생성자

con.properties 파일

- conn.properties : DB 연결정보 저장

    # conn/conn.properties

    driver=oracle.jdbc.driver.OracleDriver
    url=jdbc:oracle:thin:@localhost:1521:xe
    user=아이디
    password=비번

PersonDAO:: SELECT

    public Person select(int no) {// 한 개의 Person정보 얻어오기 --> 수정폼
            connect();
            try {
                stmt = conn.createStatement();
                String sql = "SELECT name,age,job FROM person WHERE no =" + no;
                rs = stmt.executeQuery(sql);
                if (rs.next()) {
                    // rs.get~()
                    Person p = new Person(no, rs.getString("name"), rs.getInt("age"), rs.getString("job"));
                    return p;
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                disConnect();
            }
            return null;
        }// select

        public ArrayList<Person> selectAll() {// 모든 Person 정보 얻어오기
            connect();
            ArrayList<Person> list = new ArrayList<Person>();

            try {
                stmt = conn.createStatement();
                String sql = "SELECT no,name,age,job FROM person ORDER BY no";
                rs = stmt.executeQuery(sql);
                while (rs.next()) {

                    /*
                     * String name = rs.getString("name"); int age = rs.getInt("age"); String job =
                     * rs.getString("job"); Person person = new Person(0,name,age,job);
                     * list.add(person);
                     */
                    list.add(new Person(rs.getInt("no"), rs.getString("name"), rs.getInt("age")
                    , rs.getString("job")));
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                disConnect();
            }
            return list;
        }// ArrayList

PersonDAO:: INSERT

    public boolean insert(자바빈즈) {}
    public boolean insert(Person p) {}
    public void insert(Person p) {}

    public boolean insert(Person p) {
      connect();
      try {
        stmt = conn.createStatement();
          String sql="insert into person (no,name,age,job) values "
                  //+ "(1, '홍길동' , 13 , '학생' )";
                 + "(person_seq.nextval, '"+p.getName()+"' , "+p.getAge()
                  +" , '"+p.getJob()+"' )";
          System.out.println("추가SQL==> "+ sql);
          stmt.executeUpdate(sql);//DB에게 입력요청
          return true;

      } catch (SQLException e) {
        e.printStackTrace();
      } finally {
          disconnect();
      }

      return false;
    }//insert

PersonDAO:: UPDATE

    public boolean update(Person p) {
            connect();
            try {
                stmt = conn.createStatement();
                String sql = "UPDATE person SET age=" + p.getAge() + ", job='" 
                + p.getJob() + "' WHERE no="+p.getNo();
                System.out.println("수정 sql="+sql);
                int t = stmt.executeUpdate(sql);
                System.out.println("수정행:"+t);
                if(t==1) {
                    return true;
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                disConnect();
            }
            return false;
        }// update

VIEW

InputForm.java
MainView.java
UpForm.java


Controller

: 전체 프로그램에 대한 흐름 제어 역할

  1. 사용자 요청 분석 (예: 어떤 버튼을 눌렀는지)
  2. 사용자 입력 데이터 얻어오기 (예: 입력폼 또는 수정폼을 통해 입력된 데이터)
  3. ★모델객체생성(예: PersonDAO)
  • 메소드호출
  • 결과값 (리턴값) 얻기, 저장, 판단
  1. 페이지(뷰) 호출 (예: 메인(JTable) ----> 입력폼)
  2. 선택사항) 유효성 검사(valid check)
  • 사용자가 입력한 데이터에 대한.

  • 데이터베이스에서도 데이터 무결성을 위한 유효성 검사

       public void actionPerformed(ActionEvent e) {
       Object ob = e.getSource();//action이벤트를 발생시킨 이벤트 소스의 주소 얻기
    
       if(ob==mainView.bt_insert) {//1.메인뷰 : 입력버튼   ==> 분석: 입력폼요청!!
          //4.메인뷰  ---> 입력폼   이동!! 
           mainView.setVisible(false);
           form.setVisible(true);
       }else if(ob==form.bt_submit) {//1.입력폼: 입력버튼 ==> 분석: DB입력 요청!!
    
           //2. 입력데이터 얻기
           String name = form.tf_name.getText();
           String age = form.tf_age.getText();
           String job = form.tf_job.getText();
    
           //세개의 변수를  p변수로 정의하기(한개의 변수명으로 정의하기)
           Person p = new Person(0, name, Integer.parseInt(age), job);
    
           //3. 모델 객체생성
           PersonDAO dao = new PersonDAO();
             dao.insert(p);
       }
    
       }//actionPerformed