2008. 9. 2. 00:41

자바를 진정으로 하고 싶으면...

http://kangcom.com/common/bookinfo/bookinfo.asp?sku=200706250022#0

Thinking in Java 를 보자~

책방에서 한번 둘러보고 맘에 들거나 본인에게 맞을 것 같으면 ,,, 꼭 사봐라~ ^^
2008. 8. 29. 16:02

Chap 14. 뷰

뷰(view)는 물리적인 테이블에 근거한 논리적인 가상테이블이다.
실질적으로 데이터를 저장하고 있지 않지만 실제 테이블을 사용하는 것과 동일하게 뷰를 사용하여 테이블을 관리할 수 있다.
뷰는 반복적으로 쿼리를 날리는 것을 방지하기 위해서 사용된다.

뷰의 기본형식
create view view_name
as
select_statement

=========== 30번 부서에 소속된 사원들의 사번 및 이름 출력==================
create view emp_view30
as
select empno, ename, deptno
from emp_cp01
where deptno=30;

desc emp_view30; // 뷰의 구조 보기
select * from emp_view30; // emp_view30 내용 보기
======================================================================
================= insert 문으로 뷰에 행을 추가하기 =========================
insert into emp_view30
values(1111, 'AAAA',30);
select * from emp_view30; // view에 데이터가 추가된 것을 확인할 수 있다.
select * from emp_cp01; // emp_cp01에 데이터가 추가된 것을 확인할 수 있다.
=====================================================================

뷰의 종류
단순 뷰 : 하나의 테이블에 의해 정의한 뷰
새로 생성되는 뷰에 대해 컬럼명을 제시하지 않으면 기본테이블의 컬럼명을 상속 받는다.
================= insert 문으로 뷰에 행을 추가하기 ====================
create view dept_sum
as
select deptno, sum(sal) sum_sal
// 함수를 사용할 경우 반드시 별칭을 반드시 지정해야 한다.
from emp_cp01
group by deptno;
==================================================================

복합 뷰 : 두 개 이상의 기본 테이블에 의해 정의한 뷰
================= 사번과 이름 부서명을 복합뷰로 검색 =================
create view emp_view_join
as
select e.empno, e.ename, d.dname
from emp e, dept d
where e.deptno=d.deptno;
select * from emp_view_join;
=====================================================================

뷰의 제거
drop view view_name
뷰의 변경
create or replace view view_name
select_statement
2008. 8. 28. 14:18

Part 6. AWT - IV 입력관련 이벤트 처리

입력 관련 이벤트 처리에서 인터페이스의 구현과 Adapter 클래스의 구현을 알아보도록 합니다. 아래는 샘플 코드입니다.
입력은 KeyEvent와 MouseEvent로 나누어 볼 수 있습니다.
===================================================================================
package pack02;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
class FrameTest extends Frame{
 FrameTest(){
  setSize(300,200);
  setVisible(true);
  addWindowListener(new WindowAdapter(){
   @Override
   public void windowClosing(WindowEvent arg0) {
    dispose();
    System.exit(0);
   }      
  }
  );
 }
}
public class Ex01 {
 public static void main(String[] args) {
  new FrameTest();
 }
}
===================================================================================
KeyListener 인터페이스를 통한 구현
인터페이스를 implements 하므로 인터페이스의 모든 추상메소드를 오버라이딩 해야 한다.
===================================================================================
package pack01;
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
// 이벤트 처리를 위해서 이벤트 소스를 포함한 클래스를 이벤트 처리 객체로 만들어 준다.
class FrameTest extends Frame implements KeyListener{
 public void keyPressed(KeyEvent e) {
  ta.append(e.getKeyChar()+"가 눌림\n");
  //ta.append((String)e.getKeyChar());
  // 소스가 에러를 일으키는 이유 : 기본형 char를 String로 캐스팅 하지 못한다.
 }
 public void keyReleased(KeyEvent e) {
 }
 public void keyTyped(KeyEvent e) {
 }
 TextField txt; // 이벤트 소스
 TextArea ta;
 FrameTest(){
  add(txt=new TextField(20), BorderLayout.NORTH);
  // 이벤트 소스와 이벤트 처리 객체를 연결
  txt.addKeyListener(this);
  add(ta=new TextArea(5,2), BorderLayout.CENTER);
  setSize(300,200);
  setVisible(true);
  addWindowListener(new WindowAdapter(){
   @Override
   public void windowClosing(WindowEvent arg0) {
    dispose();
    System.exit(0);
   }      
  }
  );
 }
}
public class Ex01 {
 public static void main(String[] args) {
  new FrameTest();
 }
}
===================================================================================
KeyAdapter 클래스를 통한 구현
어댑터 클래스를 내부 무명객체로 생성하여 이벤트 처리 하기
클래스를 불러오므로 원하는 메소드만 오버라이딩 하면 된다.
===================================================================================
package pack02;
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
class FrameTest extends Frame{
 TextField txt;
 TextArea ta;
 FrameTest(){
  add(txt=new TextField(20), BorderLayout.NORTH);
  // 객체 생성하면서 클래스 설계 - 무명 클래스
  // 어댑터 클래스를 내부 무명객체로 생성하여 이벤트 처리해보기
  txt.addKeyListener(
    new KeyAdapter(){
     @Override
     public void keyPressed(KeyEvent e) {
      ta.append(e.getKeyChar()+"가 눌림\n");
     }    
    }
  );
  add(ta=new TextArea(5,2), BorderLayout.CENTER);
  setSize(300,200);
  setVisible(true);  
  addWindowListener(new WindowAdapter(){
   @Override
   public void windowClosing(WindowEvent arg0) {
    dispose();
    System.exit(0);
   }      
  }
  );
 }
}
public class Ex01 {
 public static void main(String[] args) {
  new FrameTest();
 }
}
===================================================================================
MouseListener 인터페이스를 통한 구형 - 마우스를 클릭하면 점 이동하기
===================================================================================
package pack03;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
class FrameTest extends Frame implements MouseListener{
 public void mouseClicked(MouseEvent e) {
  x=e.getX(); y=e.getY();
  repaint();
 }
 public void mouseEntered(MouseEvent e) {
 }
 public void mouseExited(MouseEvent e) {
 }
 public void mousePressed(MouseEvent e) {
 }
 public void mouseReleased(MouseEvent e) {
 }
 int x=10, y=100;
 @Override
 // 이벤트에 의해서 호출되는 메서드
 public void paint(Graphics g) {
  g.setColor(new Color(250,0,250));
  g.fillOval(x, y, 20, 20);
 }
 FrameTest(){
  addMouseListener(this);
  setSize(300,200);
  setVisible(true);
  addWindowListener(new WindowAdapter(){
   @Override
   public void windowClosing(WindowEvent arg0) {
    dispose();
    System.exit(0);
   }      
  }
  );
 }
}
public class Ex01 {
 public static void main(String[] args) {
  new FrameTest();
 }
}
===================================================================================
MouseAdapter 클래스를 통한 구형 - 마우스를 클릭하면 점 이동하기
===================================================================================
package pack04;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
class FrameTest extends Frame{
 int x=10, y=100;
 @Override
 public void paint(Graphics g) {
  g.setColor(new Color(250,0,250));
  g.fillOval(x, y, 20, 20);
 }
 FrameTest(){
  // 어댑터 클래스를 내부 무명객체로 생성하여 이벤트 처리해보기
  addMouseListener(new MouseAdapter(){
   @Override
   public void mouseClicked(MouseEvent e) {
    x=e.getX(); y=e.getY();
    repaint();
   }  
  }
  );
  setSize(300,200);
  setVisible(true);
  addWindowListener(new WindowAdapter(){
   @Override
   public void windowClosing(WindowEvent arg0) {
    dispose();
    System.exit(0);
   }      
  }
  );
 }
}
public class Ex01 {
 public static void main(String[] args) {
  new FrameTest();
 }
}
===================================================================================
MouseMotionListener 인터페이스를 통한 구현 - 드래그 시, 점 이동
===================================================================================
package pack05;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
class FrameTest extends Frame implements MouseMotionListener{
 public void mouseDragged(MouseEvent e) {
  x=e.getX(); y=e.getY();
  repaint();
 }
 public void mouseMoved(MouseEvent e) {
 }
 int x=10, y=50;
 @Override
 public void paint(Graphics g) {
  addMouseMotionListener(this);
  g.setColor(Color.RED);
  g.fillOval(x,y,20,20);
 }
 FrameTest(){
  setSize(300,200);
  setVisible(true);
  addWindowListener(new WindowAdapter(){
   @Override
   public void windowClosing(WindowEvent arg0) {
    dispose();
    System.exit(0);
   }      
  }
  );
 }
}
public class Ex01 {
 public static void main(String[] args) {
  new FrameTest();
 }
}
===================================================================================
MouseMotionAdapter 클래스를 통한 구현 - 드래그 시, 점 이동
===================================================================================
package pack06;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
class FrameTest extends Frame{
 int x=10, y=50;
 @Override
 public void paint(Graphics g) {
  g.setColor(Color.RED);
  g.fillOval(x,y,20,20);
 }
 FrameTest(){
  // 어댑터 클래스를 내부 무명객체로 생성하여 이벤트 처리해보기
  addMouseMotionListener(new MouseMotionAdapter(){
   @Override
   public void mouseDragged(MouseEvent e) {
    x=e.getX(); y=e.getY();
    repaint();
   }  
  }
  );
  setSize(300,200);
  setVisible(true);
  addWindowListener(new WindowAdapter(){
   @Override
   public void windowClosing(WindowEvent arg0) {
    dispose();
    System.exit(0);
   }      
  }
  );
 }
}
public class Ex01 {
 public static void main(String[] args) {
  new FrameTest();
 }
}
===================================================================================