Web develop/JDBC_XML

[JDBC] Properties 사용법 및 사용예시

ForA 2019. 7. 10. 19:03
728x90

Properties

: 속성데이터(문자열, text)를 담는 클래스

Properties pro = new Properties();

데이터 저장(입력)

pro.setProperty(String key, String value);

pro.setProperty("k1","길동");
pro.setProperty("k2","라임");
  • key: 저장 또는 검색을 위한 값(유일한 값)
  • value: 저장하고자 하는 문자열(text) 데이터

데이터 출력(조회)

System.out.println("k1="+pro.getProperty("k1"));
System.out.println("k2="+pro.getProperty("k2"));

// 키값을 모르는 경우
Eumeration enu = pro.propertyNames();
  • Enumeration: 열거형 인터페이스
  • enu = [k1, k2, k3,...]

properties 파일로부터 속성데이터 얻기

* properties 파일작성

형식) 속성이름 = 속성데이터
구분자) 서로 다른 속성을 라인으로 구분
주의) '=' 보통 앞과 뒤에 공백을 주지 않는다

--test.properties 파일

name =gildong
age =13
job =\uD559\uC0DD

try {
            pro.load(new FileReader("src/j0610/test.properties"));
        } catch (FileNotFoundException e) {
        } catch (IOException e) {
        }
        System.out.println("이름: "+pro.getProperty("name"));
        System.out.println("나이: "+pro.getProperty("age"));
        System.out.println("직업: "+pro.getProperty("job"));
        System.out.println("etc: "+pro.getProperty("etc"));

Properties 사용예시

 

DAO : Data Access Object

  • DB 접근을 위한 DB전용 객체
  • 각 메소드에는 sql문 실행에 관련된 코드들로 구성 하는것이 가장 이상적
  • CRUD 작업실행하는 메소드를 정의

DTO : Data Transfer Object || VO : Value Object

  • 계층간 데이터교환을 위한 자바빈즈
  • VO(Value Object)라는 단어를 많이 사용

파일 구성

Control : Controller.java

Model : PersonDTO.java , PersonDAO.java

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

Conn 폴더 : conn.properties


CONN

conn.properties

: DB 연결정보 저장

driver=oracle.jdbc.driver.OracleDriver 
url=jdbc:oracle:thin:@localhost:1521:xe 
user=scott password=tiger

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

Connection conn;
Statement  stmt;

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:: 객체생성

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();
  }
}//생성자

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


CONTROL

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