본문 바로가기
국비교육기관/수업

26일차_자바_GUI_JDBC

by 밀키스 2021. 4. 19.

@21.04.19

 JAVA 

@GUI - JSlider 

% 3개의 슬라이더를 변경하면 버튼의 색이 실시간으로 바뀌는 실습 

%StateChange

슬라이더의 이벤트에  StateChange 라는 이벤트를 추가한다. 해당 이벤트는 슬라이더의 값이 변경될 때마다 발생하는 이벤트로 해당 슬라이더의 값을 R,G,B의 값중 하나로 지정, Button의 색상을 변경한다.

 

각 이벤트 별로 실시간으로 색이 변경되게 하기 위해, RGB의 3개의 색상에 해당하는 부분을 바로바로 가져오도록 만들었다.여기서, 가운데 사진을 보면,  slider_color  변수가 아래에서 지정이되어  getValue 를 가져오지 못하는 경우 또한 존재하였다. 이에 대해 맨 위의 Field에 정의해주는게 맞긴 하겠지만... 나는 그냥 코드 위치를 바꿨다.정의하는건 위로, 이벤트는 아래로.(원래는 그냥 Field 쪽에 < private int R,G,B = 0 > 이라는 한줄만 추가해주면 된다. )

 

그렇게 우측의 사진처럼 슬라이더가 변경될 때마다 "색상을 변경해주세요!"라는 버튼의 색상이 바뀌는 것을 볼 수 있다.

 

%setBackground 

 setBackground  라는 명령어를 통해 Button의 색상을 변경해줄건데 보면 매개변수로서 객체가  Color  임을 볼 수 있다. 때문에 집어 넣을때는  new 를 사용해 Color 객체에 우리가 만들었던 RGB 값을 대체한 int형 변수를 집어 넣게 된다.

 

%Error - NullpointerException 

 NullpointerException  이라는 에러는 해당 객체가 생성은 되었으나, 갖고 있는 값이 null이라서 발생하는 에러이다.

뭐 당연히 내가 값이 부여가 안되어있을리는 없으나, 코드 위치상 맞지 않아 발생하는 에러일 것.

 

위의 에러는 내가  btn 이라 이름 붙힌 Button의 색상을  setBackground  라는 명령어로 바꾸려하는데, 그 전에 변수에 값이 할당되지 않을것이다.

 

때문에, Field에 btn이라는 변수를 정의해주는것으로 에러를 해결하였다.

 

@Stack & Queue

%Stack 

asd

asd

%Queue 

asd

asd

 

@GUI - 이미지 넣기 

이미지는 Design 탭에서 넣을수도 있겠지만, 해당 실습에서는 Souce 코드를 추가하여 집어 넣었다.

 

음... 이미지는  Image 라는 객체로  ImageIcon  명령어를 통해 파일을 가져오고,  getImage  명령어를 통해 사진을 가져온다. getScaledInstance 라는 명령어를 통해 집어 넣을 이미지의 크기와 해상을 설정하였다.

 

@JDBC(Java DataBase Connectivity) 

@연결하기 

연결은 위의 그림과 같다.

전에 Music이란 JAR 파일을 연결해준것 처럼 외부 파일을 연결한다.

 

위의 그림처럼 오라클내에 존재하는 JAVA의 JAR파일을 이클립스와 연동하여 연결한다.

 

@DataBase 연결

// 2. DataBase 연결
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user_id = "hr";
String user_pw = "hr";

위의 코드에 대해 하나씩 보면

위와 같다. 여기서 "thin"은 Driver의 이름이다.

 

그리고  DriverManager.getConnection  이라는 명령어를 통해 sql에 접속할 수 있다.

위에서 설정했던 ID와 PW를 통해 오라클에 접속하게 되는데 이때, 예외처리문을 통해 ClassNotFoundException을 제외해준다. 해당 에러는 Class 명을 찾지 못해 나는 에러라고 하는데... 

분명 폴더에 파일이 있더라도 발생하는 경우가 있다고 한다.

 

@데이터 삽입 

// 2. DataBase 연결
//connection
Connection conn = DriverManager.getConnection(url, user_id, user_pw);
// 3. info 테이블에 id - lihyun, pw - 1234 데이터 삽입
String sql = "insert into info values('psu', '1234')";
PreparedStatement psmt = conn.prepareStatement(sql);
int cnt = psmt.executeUpdate();
if(cnt>0) {
System.out.println("회원가입 성공");
}else {
System.out.println("회원가입 실패");
}
if(conn != null) {
System.out.println("연결");
}else {
System.out.println("연결 실패");
}

위에서 연결은 해보았다. 그렇다면 이번에는 데이터 삽입인데.

.sql 이라는 변수에 내가 오라클에 집어 넣을 명령문을 집어 넣고, .PreparedStatement라는 명령어 및 객체를 통해 내가 연결한 ( 여기서는 .conn이라는 변수에 넣어줬다. ) 오라클 DB에 수행할 작업을 입력하는것으로 내가 지정한 작업을 수행시킬 수 있다.

 

 executeUpdate 는 DB에서 추가, 삭제, 수정 등의 데이터를 건드리는 SQL문을 실행하게 해준다.

                      --> 해당 메서드의 반환 값은 해당 SQL문 실행에 영향을 받은 행(Row)의 수를 반환한다.

@동적로딩

 => Java는 동적 로딩을 지원하기 때문에 실행 시에 모든 클래스가 로딩되지 않고 필요한 시점에 클래스를 로딩하여 사용할 수 있다.

 

동적 로딩의 장점과 단점

  -일부 클래스가 변경되어도 전체 어플리케이션을 다시 컴파일 하지 않아도 된다.
  -변경사항이 발생해도 비교적 적은 작업만으로도 처리할 수 있는 유연한 어플리케이션을 작성할 수 있다.
  -C언어와 다르게 코드 블럭이 이곳 저곳에 위치해 있어도 된다.
  -다형성과 같은 객체지향 개념이 적용될 수 있게 해준다.
  -실행 시 연결된 부분에 대한 판단을 해야하므로 속도 측면에서는 불리하다.

 

클래스 동적 로딩의 종류

  -로드 타임 동적 로딩 : 하나의 클래스를 로딩하는 과정에서 필요한 다른 클래스를 동적으로 로딩하는 것
  -런타임 동적 로딩 : 코드를 실행하는 순간에 필요한 클래스를 로딩하는 것 

 

@Dead Code 

 => 직역하면 죽은 코드. 간단히 말해서 자바 클래스내에서 실행되지 않을 코드를 말한다. 예로 들면

int a = 0;
if(a>0){
//Dead Code
} else{
System.out.println("0보다 크지 않다.");
}

위에서 첫번째 조건문에 해당하는 부분을  Dead Code  라고 한다.

@finally - 예외처리 

 ==> 자바에서의 try-catch문에서 사용할 다른 명령어. 간단히 말하면 오류의 여부와 관계 없이 무조건 실행되는 구간을 말한다.

   -> do-while문에서 do 안의 실행문과 비슷한 개념이다.

 

asd

이벤트 디스패처 공부해보기

반응형

'국비교육기관 > 수업' 카테고리의 다른 글

28일차_자바_JDBC  (0) 2021.04.21
27일차_자바_GUI_StaticMain살짝 / JDBC_DAO_DTO  (0) 2021.04.20
25일차_자바_GUI  (0) 2021.04.16
24일차_자바_상속_오버라이딩_캐스팅  (0) 2021.04.15
23일차_자바_ArrayList_MVC  (0) 2021.04.14

댓글