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)
- Connection 작업
- Statement stmt 객체생성 (sql 작성, 실행)
ResultSet rs 객체생성 (조회된 결과 저장)
rs.next() rs.get자료형('컬럼명') - 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
: 전체 프로그램에 대한 흐름 제어 역할
- 사용자 요청 분석 (예: 어떤 버튼을 눌렀는지)
- 사용자 입력 데이터 얻어오기 (예: 입력폼 또는 수정폼을 통해 입력된 데이터)
- ★모델객체생성(예: PersonDAO)
- 메소드호출
- 결과값 (리턴값) 얻기, 저장, 판단
- 페이지(뷰) 호출 (예: 메인(JTable) ----> 입력폼)
- 선택사항) 유효성 검사(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
'Web develop > JDBC_XML' 카테고리의 다른 글
[XML] XML 자주쓰이는 문법 정리 (0) | 2019.07.10 |
---|---|
[XML] XML 정의 및 구조 (0) | 2019.07.10 |
[JDBC] JDBC 프로그래밍 (0) | 2019.07.10 |
[JDBC] Swing에서 중복아이디 체크하기 (PrepareStatement 사용) (0) | 2019.06.19 |
[JDBC] Prepared Statement 사용법 및 사용예제 (0) | 2019.06.19 |