JDK 설치하는 법 / 환경변수 설정하는 법

오늘은 첫 시작이니

일단 자바 프로그래밍을 하기위해서

세팅을 해줘야겠죠!!!

http://www.oracle.com/technetwork/java/javase/downloads/index.html

JDK를 설치를 시작해보겠씁니다.

JDK란 JAVA Development Kit

으로 자바 개발 도구모음이라고 생각하시면 됩니다.

 


공사를 하기전에 재료를 챙긴다고 생각하시면 되죠!!!
 

자바 SE와 자바 EE가 있는데

여러분들은 아직 사용자 단계이니 SE를 설치해주시면 됩니다.

SE는 스탠다드 에디션이고

EE는 거대 프로젝트 용으로 알고 있는데 음... 임폴리인가.. 이건 잘 모르고

그냥 큰 규모에 사용한다고만 알아두셔도..

Java ME는 마이크로에디션이고 임베디드쪽 하시는 분들이 사용하시는걸루 알고 있어요

위에서 5번에 체크 된 부분을 확인하시고 다운로드 받고 실행을 시키시며 설치가 됩니다.

환경변수는 다음 포스팅에서 해 보도록 하겠습니다.

 

               

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

자바 구구단 출력

/*
*Date: 17.12.12
*Author: Allan Ahn
*/
public class Gugudan {
 public static void main(String[] args) {
  boolean flag = true;
//밑에 3개 변수의 수를 변경하면 구구단 출력형태 변경
  int count = 5; // 옆으로 출력할 단 개수
  int danCount = 14; // 몇 단까지 출력할지
  int hangCount = 13; // 밑으로 출력할 행 개수
  for (int i = 2; i <= danCount; i += count) {
   for (int j = 1; j <= hangCount; j++) {
    for (int k = 0; k < count; k++) {
     if (i + k <= danCount) {
      if (flag) {
       for (int z = 0; z < count; z++) {
        if (i + z <= danCount)
         System.out.print("====" + (i + z) + "단====\t");
       }
       System.out.println();
       flag = false;
      }
      System.out.print(i + k + " * " + j + " = " + (i + k) * j + "\t");
     } // end first if
    } // end third for
    System.out.println();
   } // end second for
   flag = true;
   System.out.println();
  } // end first for
 }
}
 

 

위코드를 실행한 결과입니다.

               

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

27일차 수업( JSP servlet 및 환경설치 )

 

CGI ( common Gateway Interface )
==> 동적으로 실행되어 클라이언트의 다양한 요구사항을 만족 시킬수 있는 개념

==> CGI를 구체화한 프로그램 언어 : JSP, Servlet, PHP, ASP

 

<JSP/Servlet 은 자바 기반>
따라서 JVM이 필요하다. JVM포함한 특별한 컨테이너(container)가 필요하다.

가장 많이 사용하는 tomcat 컨테이너 사용

 

* 환경

클라이언트              서버
: 웹브라우저            : 웹서버 ( 아파치, IIS )
                               ==> HTML를 서비스

 

* 환경2

클라이언트              서버
: 웹브라우저            : 웹서버 ( 아파치, IIS )
                             : 웹 컨테이너(tomcat)
                             ==> 웹 컨테이너가 웹 서버기능을 가지고 있기때문에

 

 

환경설정

가. JDK 설치
나. Eclipse설치 

다. Tomcat 설치
: http://jakarta.apache.org -> zip 파일로된 tomcat 7 파일을 받는다.

 

C 밑에 아무 파일(영어이름)이나 만들고 그안에 넣고 압축을풀면 준비 끝!

그리고 그안에 압축을 풀어준다.

 

서블릿(servlet)

: *.java 

작성방법

가. extends HttpServlet 상속받아야함
나. main 메소드 대신에 doGet(기본) 또는 doPost 메소드를 구현해야 된다.

 

ex) com.test.HelloServlet
클라이언트의 요청방법
http://localhost:8090/HelloTest/servlet/com.test.HelloServlet
--> 길고 보안에 취약함
다. 실행결과는 항상 html로 작성한다.
라. html를 클라이언트로 응답한다.

 

 

서블릿의 매핑방법 2가지!

 

a. web.xml
==> 배치지시자( Deployment Descriptor : DD )
 웹 어플리케이션의 환경정보를 저장한다.
==> xml로 구성되어 있다.
==> Servlet2.5, jsp2.1 (버전에서 주로 사용하던 방법)

 

사용방법>>>>

WEB-INF 에서 web.xml 소스에 아래와 같이 수정

 

<servrlet>

<servlet-name>서블릿별명</servlet-name>

<servlet-class>패키지를 포함한 서블릿명</servlet-class>

</servrlet>

<servlet-mapping>

<servlet-name>서블릿별명</servlet-name>

<url-pattern>매핑명</url-pattern>

</servlet-mapping>

 

b. annotation
==> web.xml에 설정 대신에 사용하는 방법
 자바코드내에서 설정하는 방법이다.
 Servlet3.0, jsp2.2 (Tomcat 7 에서만 동작) 보전에 사용 가능한 방법

 

사용방법 >>>>

@WebServlet("/Employee")

 

===부충수업 ========

 

  Servlet/JSP 과정 정리

1. 동작환경?

 : Client/Server 환경

클라이언트 A      가. 요청  서버
: 웹브라우저 ------------------->   나. 요청처리
     다. 결과(html형식)
            <-------------------
  라. 응답
서버는 html을 만드는거고, 클라이언트가 실행한다.

* 클라이언트에서 실행되는 프로그램 언어(컴포넌트)종류?
- html
- 자바스크립트

 

* 서버에서 실행되는 웹 컴포넌트 종류 3가지?

가. 정적 웹 컴포넌트
- html
==> 한번 작성하면 결과가 항상 동일하다.
    현재시간을 얻을 수가 없다.
 따라서 다양한 클라이언트 요구를 만족시킬 수 없다.

나. 동적 웹 컴포넌트
- JSP
- Servlet
==> 프로그램으로 실행된다.
   따라서 실행결과가 동적으로 다양하다.
클라이언트의 다양한 요규를 처리할 수 있다.

* CGI ( common Gateway Interface )
==> 동적으로 실행되어 클라이언트의 다양한 요구사항을 만족 시킬수 있는 개념

==> CGI를 구체화한 프로그램 언어 : JSP, Servlet, PHP, ASP

- JSP/Servlet 은 자바 기반이다.
따라서 JVM이 필요하다. JVM포함한 특별한 컨테이너(container)가 필요하다. 가장 많이 사용하는 tomcat 컨테이너 사용.

* 환경

클라이언트     서버
: 웹브라우저    : 웹서버 ( 아파치, IIS )
     ==> HTML를 서비스

* 환경2

클라이언트     서버
: 웹브라우저    : 웹서버 ( 아파치, IIS )
     : 웹 컨테이너(tomcat)
     ==> 웹 컨테이너가 웹 서버기능을 가지고 있기       때문에 ==> JSP, servlet 실행

 

2. 웹 컨테이너
: tomcat
: http://jakarta.apache.org 에서 무료 다운.

3. 환경설정
가. JDK 설치
나. Eclipse설치


다. Tomcat 설치
: http://jakarta.apache.org

*자바 개발 3가지 플랫폼
- Java SE ( Java Standard Edition )
==> 일반 PC에서 실행된는 프로그램 개발용.
==> 여지껏 우리가 배웠던 환경
==> 필요환경
 :: JDK 만 설치하면 된다.
 :: eclipse

- Java Enterprise Edition)
==> Enterprise 환경에서 실행되는 프로그램 개발용.
==> 필요 환경
:: JDK, Tomcat 설치하면 된다.
:: eclipse
:: 클라이언트는 웹 브라우저 필요.


- Java ME( Java Micro Edition )
==> 핸드폰, PDA같은 소규모 장치에서 실행되는 프로그램 개발용.
: 웹브라우저 ------------------->

     <-------------------

==> 이클립스와 톰켓 연동
가. Java EE 퍼스펙티브 선택

4. web application
: context 라고 한다.
: 물리적인 위치는 C:\tomcat7\apache-tomcat-7.0.42\webapps 폴더내에 있는 각각의 폴더를 지칭힌다.
ex) ROOT 컨텍스트 ( ROOT 웹 어플리케이션)이라고 한다.
: 용도?
==> 클라이언트가 요청했을 때, 컨테이너가 요청한 웹 컴포넌트를 찾는 디렉토리이다.

: 클라이언트 요청 처리방법?
http://서버아이피:포트번호/컨텍스트명/자원 <-- webapps에 있는 파일명을 컨텍스트라함
==> ROOT 컨텍스트는 생략한다.

ex) http://localhost:8090/examples/index.html
 http://localhost:8090/examples/test.jsp
http://localhost:8090/examples/servlet/com.test.HelloServelt

==> JSP와 HTML은 요청방법은 같다.
 서블릿은
http://서버아이피:포트번호/컨텍스트명/servlet/패키지명 포함한 클래스

: 컨텍스트 구조?
==> webapps 폴더에 저장되며 반드시 다음 구조를 갖는다.

webapps - 컨텍스트명 - WEB-INF  - classes
           - lib
    - web.xml

반드시 이 구조를 가져야한다. 이 구조가 아니면 컨테이너가 찾지 못한다.

5. 사용자 정의 context(web Application ) 생성

가. Eclipse에서 File > New > Dynamic Web Project 선택

6. 3가지 컴포넌트
가. html
==> www.w3schools.com 참조

나. JSP

다. 서블릿

7. 서블릿 ( servlet )

: *.java
: 작성방법

가. extends HttpServlet 상속받아야함
나. main 메소드 대신에 doGet(기본) 또는 doPost 메소드를 구현해야 된다.

 ex) com.test.HelloServlet
클라이언트의 요청방법
http://localhost:8090/HelloTest/servlet/com.test.HelloServlet
--> 길고 보안에 취약함
다. 실행결과는 항상 html로 작성한다.
라. html를 클라이언트로 응답한다.

* 아키텍쳐
 가. 요청     서버
http://localhost:8090/HelloTest/servlet/com.test.HelloServlet
브라우저 -----------------------------> com.test.Helloservlet
      나. 실행(프로그램)
      다. 결과(html형식) 
 <-----------------------------
 라. 응답

마. html을 보여준다.
* 서블릿 맵핑( Servlet mapping) --> 취약한 보안을 방지하는 방법
- 요청값을 짧게 줄이는 작업이다.
 이유는 요청값이 길고 보안에 취약하기 때문이다.
http://localhost:8090/HelloTest/servlet/com.test.HelloServlet
==?http://localhost:8090/HelloTest/servlet/xxx <- 의미없는 이름으로 지정

==> 서블릿 맵핑 정보 저장하는 방법 2가지

a. web.xml
==> 배치지시자( Deployment Descriptor : DD )
 웹 어플리케이션의 환경정보를 저장한다.
==> xml로 구성되어 있다.
==> Servlet2.5, jsp2.1 (버전에서 주로 사용하던 방법)

b. annotation
==> web.xml에 설정 대신에 사용하는 방법
 자바코드내에서 설정하는 방법이다.
 Servlet3.0, jsp2.2 (Tomcat 7 에서만 동작) 보전에 사용 가능한 방법

8. XML
 : eXtensible Markup Language ( XML )
=> 확장 가능한 마크업 언어
: 특징
- html 처럼 모두 태그(엘리먼트:element, 노드: node)로 구성됨.
시작태그
몸체
끝태그

예> <html> ==> 시작태그
    ==> 몸체 
    </html> ==> 끝태그

* 몸체가 없는 태그 ( empty 태그 )
예> <person> 홍길동 </person>
    <person></person> --> 빈태그
                      --> <person />
- 자바처럼 대소문자를 구별한다.
- html은 고정된 태그명이 있는데, xml은 마음대로 태그명을 추가할 수 있다. ( 가장 큰 특징 )
- xml을 작성하는 이유?
  ==> 데이터 저장
  예>
     <person>
 <name>홍길동</name>
  <age>29</age>
 <address>서울</address>
     </person>

  홍길동,20,서울

A회사  B회사
:win  :unix
:hwp         :word

    XML
- xml은 플랫폼(운영체제,프로그램 언어...)에 독립적이다.
==> xml 태그정보와 관련된 약속이 필요하다.
 ( 태그명, 갯수, 순서, 속성명, 속성값종류,...)
==> 2가지 약속문서로 작성가능하다.
- DTD (Data Type Definition)
-> *.dtd
- schema
-> *.xsd
======> xml 파일에서 dtd, xsd 의 문법을 따르는지 지정한다.

- xml은 태그가 계층구조로 되어 있다.

예>
     <person>
 <name>홍길동</name>
  <age>29</age>
 <address>서울</address>
     </person>

       person  => 루트태그(root 태그) (단 하나만 가질수있다.)
   |
   name  age   address
    |     |       |
  홍길동 20     서울

- 속성을 가질수 있다. 시작태그에 지정
  (속성명 = "값" , 속성명 = "값")
  반드시 속성값에는 " 또는 ' 를 사용해야 된다.
예> <person name="홍길동" age='20' />


=> 위 문법을 따르는 xml 파일을 well-formed 문서라고 한다.

=> dtd, schema 약속을 따르는 xml 파일을 valid 문서라고 한다.

가. 태그명 지정
< !ELEMENT 태그명 ( 자식태그, 자식태그2, ...) >
C:\tomcat7\apache-tomcat-7.0.42\lib 이 경로로 들어가서
servlet-api.jar 에디터 플러스로 연다.
//53번째 줄의 내용이다. (dtd파일)
<!ELEMENT web-app (icon?, display-name?, description?, distributable?,
context-param*, filter*, filter-mapping*, listener*, servlet*,
servlet-mapping*, session-config?, mime-mapping*, welcome-file-list?,
error-page*, taglib*, resource-env-ref*, resource-ref*, security-constraint*,
login-config?, security-role*, env-entry*, ejb-ref*,  ejb-local-ref*)>

나. 개수
? : 0이상
* : 1이상
 : 반드시 1

다. 속성명 지정
<!ATTLIST 속성명 타입 #IMPLIED|#REQUIRED>

: 타입은 CDATA, ID 등이 올수 있다.
: #IMPLIED은 옵션, 즉 송성을 지정안할 수 있다.
 #REQUIRED은 필수, 즉 속성이 필수사항이다.

9. web.xml
<welcome-file-list>를 에디터에서 찾는다.
<!ELEMENT welcome-file-list (welcome-file+)>
가. welcom-file-list 의 <welcom-file>
==> 맨 처음 보여주는 화면의 파일명 지정.
지정하면 브라우저에서 URL에 명시적으로 지정하지 않아도 자동으로 찾아서 보여준다.

자~~
웹.xml에 있는걸 보면
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
 
 <description>sss</description>
 
  <display-name>Test001</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>abc.html</welcome-file>
  </welcome-file-list>
</web-app>
이것은 순서대로 파일을 찾는다. 찾을 때
구지
http://localhost:8090/Test001/abc.html 을 써주지 않아도 된다.
http://localhost:8090/Test001/ 만 써도 가능하다.

xml파일이란 ~ 묶어주는 역할을 하는 것 같다.
최고 큰 녀석은 conf에  xml이다.

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
--> 여기에 지정되있으니~톰켓 메인화면이 보이는 것이다.

10. 서블릿 맵핑 설정 방법 ( 크게 두가지고 있고 둘다 먹힌다. 확인은 콘솔에서)

가. annotation 방법
 @WebServlet("/zzz") //맵핑하는것서블릿3.0에서사용하는것!!
public class HelloServlet extends HttpServlet

나. web.xml 설정 방법
<servlet>
 <servlet-name>kkkk</servlet-name>
 <servlet-class>com.test.HelloServlet</servlet-class>
 
 </servlet>
 
 <servlet-mapping>
 
 <servlet-name>kkkk</servlet-name>
 <url-pattern>/abc</url-pattern>
 
 </servlet-mapping>


11. 응답처리
  가. 요청
웹 브라우저 ------------------> 서블릿
     나. 실행
 <---------------------
 다. 응답

* 서블릿 작성 클래스 3개.
가. HttpServlet
==> 일반클래스를 서블릿으로 만들기 위해서
==> 일반클래스는 브라우저에서 요청해도 처리가 안됨.
 서블릿이어야 브라우저에서 요청할 수 있다.
==> 서블릿이 요청을 받으면 서비스 메소드 실행된다.
   ( 서비스 메소드의 종류 : doGet, doPost )
 서비스 메소드는 반드시 2가지 인자를 갖는다.
HttpServletRequest request,
 HttpServletResponse response를 갖는다.

나. HttpServletRequest
==> 클라이언트가 서버로 요청할 때 관련있는 클래스.

다. HttpServletResponse
==> 서버가 클라이언트로 응답할 때 관련있는 클래스.

* 서블릿이 응답 시 2가지 작업

가. MIME 타입지정
==> 웹 브라우저에게 응답 데이터형식을 알려줄 때 사용한다.
 ex) html, text, img, ....
==> tomcat홈>conf>web.xml 참조

response.setContentType("text/html");

나. 자바 IO 얻기

//byte
 ServletOutputStream sos = response.getOutputStream();
//char
 PrintWriter out = response.getWriter();


다. html 형식으로 출력
out.print(값);

System.out.println("WorldServlet");
  
  //응답처리 + 한글지정
  //1. MIME 타입지정
  response.setContentType("text/html;charset=EUC-KR");
  
  // 2. IO 얻기
  //byte
  //ServletOutputStream sos = response.getOutputStream();
  //char
  PrintWriter xxx = response.getWriter();
  //3.출력
  xxx.print("hello World");
  xxx.print("안녕하세요");


12. 서블릿과 DB연동
웹 브라이저 ---------> 서블릿 -------> DAO ---------> 오라클

가. 드라이버 필요
 : 클래스패스에 추가

나. DAO, DTO 패턴

 

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

18일차 수업(2) ( JDBC )

 

JDBC ( Java Database Connectivity) 

자바프로그램과 데이터베이스와 연동하는 기술이다.


  
                            JDBC
 자바프로그램 <-------------> 데이터베이스

 

먼저 JDBC를 배우기전에 준비해야할 사항들이 있다.

첫째 데이터베이스 설치 및 실행여부 확인

둘째 드라이버(dirver) 확인
-> 벤더(회사)에서 만든 클래스 파일들을 의미한다.
-> 압축해서 제공한다. ( *.jar, *.zip 형식

셋째 클래스패스 ( classpath )
a. path  ==> 명령어의 경로

b. classpath 를 설정해주는 방법

클래스파일의 경로   

CLASSPATH 환경변수에 설정방법
C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib\ojdbc6_g.jar

 

또는

 

ext 폴더에 저장하는 방법
1) 이클립스의 아무 프로젝트나 하나잡고 오른쪽클릭 -> Properties 들어간다
2) JRE System Library[JavaSE-1.7] JRE인지 JDK 인지 확인하고
3) C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib\ojdbc6_g.jar 있는
   ojdbc6_g.jar 파일을 ext 폴더에 복사하여 붙여넣고 이클립스 재실행

 

여기까지가 JDBC를 사용하기위한 사전 준비!

------------------------------------------------------------------------------------

 

 

이제 javaDB를 연결하는 자바소스를 알아보겠습니다.

 

먼저 아래와 같이 설정을 해줍니다.

 

// ojdbc6_g.jar 압축파일내의 핵심 클래스
String driver = "oracle.jdbc.driver.OracelDriver";
 //서버의 ip,port번호, sid
String url = "jdbc:oracle:thin:@localhost:1521:xe";
// 사용자 계정

String userid = "scott";
 // 사용자 비번
String passwd = "tiger";

 

그리고 나서 드라이버 로딩을 합니다.!

 

Class.forName ( driver ); 

 

이것을 써주면 에러가 나니까 예외 처리를 해주어야한다!

 

그다음엔  Connection 맺기

 

import java.sql.Connection;

 Connectioncon = DriverManager.getConnection( url,userid,passwd );

 

커넥션을 맺은 후에는 Statement 생성 ( SQL 문 전송 )

Statement 종류 3가지가 있습니다.

 

1) Statement
>

delete from person where age = 10;
delete from person where age = 11;  
..
delete from person where age = 100; 

=> statement 얻기
Statement stmt = con.createStatement(); 

2) PreparedStatement (*)  제일 자주 사용!

 delete from person where age = ?;
 나중에 ? 에 값을 지정하는 방식

 => PreparedStatement 얻기
    PreparedStatement pstmt = con.PreparedStatement( sql );

 // ? 값 설정
  pstmt.setInt(1,10);

  insert into person ( num ,name, age, address)
 

3) callableStatement
  => PL/SQL 사용시

 

Statement 설정이 끝나면 SQL문 전송

- Statement 이용
: insert, delete, update ( DML 전송)
   int n = stmt.executeUpdate(sqp);
   => n 값은 적용된 레코드 갯수
   => 디버깅 가능 ( 성공실패확인 가능 )
 : select
   ResultSet rs = stmt.executeQuery(sql); 
   while(rs.next()){
 int num = rs.getInt("num");
 String name = rs.getString("name");
 int age = rs.getInt("age");
 String address = rs.getString("addresss");
 System.out.println(num+"\t"+name);
   }
 
- PreparedStatement 이용

  
마지막으로 외부자원 close !! 사용했던 자원 역순으로......

 

Connection con
Statement stmt
ResultSet rs

 

rs.close();
stmt.close();
con.close();

 

------------------------------------------------------------------------------------
JDBC 사용시 반드시 적용시키는 2가지 패턴

. DAO 패턴 ('다오'라고 읽지 말고 '디에이오'라고 읽기 )
-> Data Access Object 패턴
-> Data? (파일, 데이터베이스)


. DTO 패턴
-> Data Transfer Object 패턴
-> 여러 데이터를 한꺼번에 효과적으로 전송하기 위한 클래스.
-> Value Object(vo), domain object ,entity 라고도 한다.
-> 일반적으로 테이블 당 한개씩 생성한다.

 
블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

18일차 수업 (SQL - insert 문 ,Delete 문 )

1. 데이터 저장 ( insert 문 ) 
1) 첫번째 방법
insert into 테이블명 ( 컬럼명, 컬럼명2 )
values( 값, 값2 );

 => 컬럼명과 값이 일대일 대응 되며 지정하지 않은 컬럼에는 null값이 저장됨
---------------------------------------------------------------------

 insert into person ( num, name, age )
 values( 10, '홍길동', 20 );


 insert into person ( num, name, age, address )
 values( 11, '이순신', 44, '전라');


 insert into person ( num, name, age )
 values( 12, '유관순', 18, '서울' );

---------------------------------------------------------------------

2) 두번쨰 방법
 insert into 테이블명
 values( 값, 값2, 값3, 값4 );
=> 반드시 테이블의 모든 컬럼에 데이터 저장해야 된다. 또한 반드시 테이블의 컬럼순서대로 저장해야 된다.

---------------------------------------------------------------------

insert into person
values(15,'이순신',44,'전라');  -- 에러난다. 

insert into person
values('이순신',15,44,'전라');

---------------------------------------------------------------------

 

2. 데이터 삭제 ( DELETE )
DML이기 때문에 commit/ rollback 가능 

delete from 테이블명;

=> where 가 없기 때문에 전체 레코드가 삭제.

 

delete from 테이블명
where 조건식;

=> 조건에 일치하는 값만 삭제

 

데이터 삭제 ( truncate ) 문==> DDL 이기 때문에 rollback 불가.
  

truncate table 테이블명;

 

==> 성능은 truncate 이 좋다.

 

데이터 수정 ( updata ) 문==> DML이기 때문에 commit / rollback 가능
 
update 테이블명 set 컬럼명 = 새로운값, 컬럼명=새로운 값
=> 다 수정됨
 
update 테이블명 set 컬럼명 = 새로운값, 컬럼명=새로운 값
where 조건식;
==> 조건에 일치하는 레코드만 수정됨.

 

보충수엄 ===================

 

1. DDL 과 DML 차이

가. DDL
- create
- drop
- alter
- truncate
=> 트랜잭션이 발생안됨, 따라서 그냥 autoCommit 된다.
   rollback 로 취소 불가. 
나. DML
- insert
- delete
- update
- merge
=> 트랜잭션이 발생됨. 따라서 commit, rollback 해야된다.

2. 객체 삭제 ( 테이블 삭제 )

문법>
 drop table 테이블명; ==> 테이블이 휴지통에 저장된다.


        drop table 테이블명;            purge recyclebin;
테이블 ----------------------> 휴지통 --------------------> 완전삭제
       <---------------------
      flashback table 테이블명 to before drop;
       --------------------------------------------------->


3. 데이터 삭제 ( DELETE )
DML이기 때문에 commit/ rollback 가능
: 문법>
 delete from 테이블명;

 => where 가 없기 때문에 전체 레코드가 삭제.

 delete from 테이블명
 where 조건식;

 => 조건에 일치하는 값만 삭제

4. 데이터 삭제 ( truncate )
   ==> DDL 이기 때문에 rollback 불가.
   ==> 문법 :
  truncate table 테이블명;

==> 성능은 truncate 이 좋다.

5. 데이터 수정 ( updata )
   : DML이기 때문에 commit / rollback 가능
   문법 :
 
 update 테이블명 set 컬럼명 = 새로운값, 컬럼명=새로운 값
 => 다 수정됨
 
 
 update 테이블명 set 컬럼명 = 새로운값, 컬럼명=새로운 값
 where 조건식;
 ==> 조건에 일치하는 레코드만 수정됨.


6. JDBC ( Java Database Connectivity)
: 자바프로그램과 데이터베이스와 연동하는 기술.
 
     JDBC
 자바프로그램 <-------------> 데이터베이스


* 고려사항
가. 데이터베이스 설치 및 실행여부 확인
나. 드라이버(dirver) 확인
-> 벤더(회사)에서 만든 클래스 파일들을 의미한다.
-> 압축해서 제공한다. ( *.jar, *.zip 형식 )
다. 클래스패스 ( classpath )

* 패스(path) 종류?
a. path
   ==> 명령어의 경로

b. classpath
   ==> 클래스파일의 경로 
CLASSPATH 환경변수에 설정방법
C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib\ojdbc6_g.jar

또는

ext 폴더에 저장하는 방법
1) 이클립스의 아무 프로젝트나 하나잡고 오른쪽클릭 -> Properties 들어간다
2) JRE System Library[JavaSE-1.7] 가 JRE인지 JDK 인지 확인하고
3) C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib\ojdbc6_g.jar 있는
   ojdbc6_g.jar 파일을 ext 폴더에 복사하여 붙여넣고 이클립스 재실행

--> 외부 환경 설정 끝

라. 4가지 정보
 // ojdbc6_g.jar 압축파일내의 핵심 클래스
 String driver = "oracle.jdbc.driver.OracelDriver";
 
 //서버의 ip,port번호, sid명
 String url = "jdbc:oracle:thin:@localhost:1521:xe";
 
 // 사용자 계정
 String userid = "scott";
 
 // 사용자 비번
 String passwd = "tiger";

마. 드라이버 로딩

 Class.forName ( driver );

바. Connection 맺기

 import java.sql.Connection;

 Connectioncon = DriverManager.getConnection( url,userid,passwd );

사. SQL 문 작성 ( ; 제외 )

 String sql = "select * from person";
 String sql2 = " insert ~ ";

아. Statement 생성 ( SQL 문 전송 )

* Statement 종류 3가지

- Statement
  =>
  예>
 delete from person where age = 10;
 delete from person where age = 11;  
 ..
 delete from person where age = 100; 

  => statement 얻기
        Statement stmt = con.createStatement(); 
   
- PreparedStatement (*)
  예>
 delete from person where age = ?;
 나중에 ? 에 값을 지정하는 방식.
 => PreparedStatement 얻기
    PreparedStatement pstmt = con.PreparedStatement( sql );

 // ? 값 설정
  pstmt.setInt(1,10);

  insert into person ( num ,name, age, address)
 

- callableStatement
  => PL/SQL 사용시

자. SQL문 전송

- Statement 이용
 
 : insert, delete, update ( DML 전송)
   int n = stmt.executeUpdate(sqp);
   => n 값은 적용된 레코드 갯수
   => 디버깅 가능 ( 성공실패확인 가능 )
 : select
   ResultSet rs = stmt.executeQuery(sql); 
   while(rs.next()){
 int num = rs.getInt("num");
 String name = rs.getString("name");
 int age = rs.getInt("age");
 String address = rs.getString("addresss");
 System.out.println(num+"\t"+name);
   }
 
- PreparedStatement 이용

 
자. 외부자원 close
: 사용했던 자원 역순으로......

 Connection con
 Statement stmt
 ResultSet rs

 rs.close();
 stmt.close();
 con.close();

7. JDBC 사용시 반드시 적용시키는 2가지 패턴

가. DAO 패턴 ('다오'라고 읽지 말고 '디에이오'라고 읽기 )
-> Data Access Object 패턴
-> Data? (파일, 데이터베이스)


나. DTO 패턴
-> Data Transfer Object 패턴
-> 여러 데이터를 한꺼번에 효과적으로 전송하기 위한 클래스.
-> Value Object(vo), domain object ,entity 라고도 한다.
-> 일반적으로 테이블 당 한개씩 생성한다.

 

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

1. 오라클 설치
   오라클 접속 ( 툴 이용 )

2. SQL ( Structured Query Language )
: 데이터베이스 명령어
: 데소문자 구별이 없다. (리터럴 제외, 즉 실제값은 대소문자 구별됨)
: 문장의 끝은 ;

<종류>
가. DML ( Data Manipulation Language )
- insert (데이터 삽입)
- delete (데이터 삭제)
- updata (데이터 수정)
- merge  (데이터 병합)
==> 트랜잭션 (transaction) 고려해야 된다.

나. DDL ( Data Definition Language )
- create (객체 생성)
- alter  (객체 수정)
- drop   (객체 제거)

* 객체 종류( Object )
- 테이블
- 인덱스
- 뷰
- 시퀀스
- 시노님

다. TCL ( Transaction Control Language )
=> 트랜잭션 관련 명령어
- commit
- rollback

라. 권한할당 / 권한취소
- grant (권한 할당)
- revoke (권한 취소)

마. qurey
- select ( 데이터 조회 )

3. 관계형 데이터베이스
=> 데이터를 테이블 형태로 관리하며, 테이블간에 관계를 맺으면서 데이터를 관리하는 방법

 열(컬럼)
  이름     나이    주소     ==> 컬럼헤딩
 -----------------------
 홍길동     20     서울     ==> 행(레코드 : 자바의 인스턴스)
 이순신     44              ==> 비어있는 컬럼 ( null 값을 갖는다고 표현 )
 유관순     18     경기

* 제약조건 5가지
=> 테이블의 올바른 데이터 설정하기 위해서.

가. primary key 제약조건 (PK)
=> 레코드를 식별하기 위해서 특정 컬럼에 지정. (유일하기 때문에)
=> 지정된 컬럼은 반드시 유일한 값을 갖는다.
   또한 null값을 갖지 못한다.
=> 중복데이터 저장을 방지할 수 있다.
=> 예> 주민번호, 사원번호, 학번

나. unique 제약조건 (UK)
=> 컬럼에 유일한 값을 저장하기 위한 제약조건.
   null값 허용.

다. not null 제약조건 (NN) (개체 무결성)
==> 컬럼에 null 값을 허용 안함.

라. check 제약조건 ( CK )
=> 컬럼에 저장할 데이터의 조건체크해서 저장여부 결정

 예> age > 20

마. foreign key 제약조건 ( FK ) (참조 무결성)
=> 다른 테이블의 PK값을 갖거나 또는 null 값을 가질수 있는 제약조건

4. select 문
- 데이터 조회시 사용되는 SQL문.

문법 :
 select 컬럼명,컬럼명2
 from 테이블명;

 select * from 테이블명;

 select salary, salary+100 -- 연산 가능
 from 테이블명;

  * 주의할점은 null을 연산하면 결과는 null이다.
   NVL (컬럼값, 초기값)
 select 컬럼명 as별명, 컬럼명 별명
 from 테이블명;
 => 모든 레코드 대상으로 출력된다.

5. 특정 레코드 검색

 select 컬럼명,컬럼명2 ( * : 모든 컬럼)
 from 테이블명
 where 조건식;

가. 비교연산자

where 컬럼 = 값;
where 컬럼 > 값;
where 컬럼 >= 값;
where 컬럼 < 값;
where 컬럼 <= 값;
where 컬럼 != 값;

 * 리터럴 종류
a. 수치
b. 문자 => ' '
c. 날짜 => ' '
==> 리터럴은 대소문자 구분됨


나. 논리연산자

AND, OR, NOT

다. 범위 지정

BETWEEN a AND b ( a부터 b까지 , a 와 b 포함 )

라. IN 연산자
=> 일치하는 값만 출력
예> salary IN(2000,4000,6000);
==> salary = 2000 OR salary= 4000 OR salary = 6000

마. LIKE 연산자
==> 일부분만 일치해도 출력
==> 2가지 심볼(symbol) 사용

% : 없거나 여러문자 대치
_ : 한문자 대치

예> s로 시작하는 사원?
    where first_name LIKE 's%';

    s로 끝나는 사원?
    where first_name LIKE '%s';

    s문자를 갖는 사원?
    where first_name LIKE '%s%';

    s로 끝나는 사원?
    where first_name LIKE '____s';

바. null 값 찾기

: IS NULL
예>
    where commission_pct IS NULL;

사. NOT 연산자
: 부정
예>  
    where commission_pct IS NOT NULL;

6. 함수 ( function )
가. 대문자로 변경 : upper(컬러명)
나. 소문자로 변경 : loewr(컬럼명)
다. NVL : null값을 다른값으로 변경
라. 변환함수
 수치데이터 문자데이터 날짜데이터 
 to_char()
 => 문자데이터로 변경
 to_number()
 => 수치데이터로 변경
 to_data()
 => 날짜데이터로 변경

 예>
 where salary = '2000';

 * 특정 포맷 지정 가능
 to_char (hire_data , 'YYYY')

마. 그룹함수
  
    - max(컬럼값)
      => 최대값
   
    - min(컬럼값)
      => 최소값

    - sum(컬럼값)
      => 합계

    - avg(컬럼값)
      => 평균
   
    - count(컬럼값)
      => 레코드 개수

    - count(*)
      =>

=======> 결과값이 하나이다. 따라서 다른 컬럼과 같이 사용불가, 같이 사용하려면 일반
         컬럼을 그룹으로 묶는다.


바. 날짜 함수
- sysdate
==> 년/월/일
- timestamp
==> 년/월/일 시:분:초.소수점9자리까지
==> 정밀도가 높다.

예 > select sysdate,timestamp
     from dual;   //daul 은 임시테이블

     select 123*234
     from dual;

7. 정렬
==> SELECT문의 마지막 문이다.

: 오름차순(기본) : asc,ASC
    ==> order by 컬럼명 ASC;
 order by 컬럼명;

: 내림차순 : desc,DESC
    ==> order by 컬럼명 DESC;

select
where
groub by
having
order by

* 다중정렬
order by 컬럼명 DESC ,  컬럼명 ASC;

-----------------------------------------------------------------------------------------
8.DDL (Data Definition Language)
- create
- alter
- drop

 * 스키마 ( schema )
: 특정 사용자가 접속해서 생성한 객체들의 대표이름.
: 사용자 개정명과 동일하다.
  스키마라고 하면 계정을 의미한다.

: 스키마는 반드시 소유자가 있다.
  다른 스키마는 접속 불가. ( 권한 없기 때문에 )

==> 스키마.테이블명;

예> select * from hr.employee;  -- hr 스키마의 employees 테이블 접근

* 객체 종류
- 테이블 : 데이터 저장
- 뷰 : 테이블의 창 , 보안과 편리한 조회
- 시퀀스 : 테이블의 특정 컬럼의 값을 자동으로 증감시키는 객체. 예> 게시판의 글번호
- 인덱스 : 테이블의 검색속도를 향상시키기 위해서, 책의 인덱스
           PK,Unique 컬럼에는 자동으로 부여된다.
- 시노님 : 테이블의 별명 예> hr.employees


9. 테이블 생성
문법>

 create table 테이블명(
    컬럼명  데이터형  제약조건
      컬럼명  데이터형 ,
        컬럼명  데이터형
 );

* 데이터형
가. 수치형 : number(자릿수) ==> 정수
      number(자릿수, 소수점자릿수)  ==> 실수
          예>
       age NUMBER(3), ==? 000 ~ 999

나. 문자형 : char( 바이트 ) ==> 캐릭터 --> 고정형( 크기고정 )
      예> name char(10) ===> 'aaa' 저장해도 10byte가 크기 지정됨
      => 최대 2000바이트까지

      varchar2( 바이트 ) ==> 박캐릭터투, 바차투 --> 가변형 (크기가변)
      예> name varchar2(10) ===> 'aaa' 저장해도 3byte가 크기 지정됨
      => 최대 4000바이트까지
다. 날짜형 : data

       timestamp

* 실습
가. scott 계정생성 => 관리자만 가능

 create user 계정명
 identified by 비번;
예>
 create user scott
 identified by tiger;

나. 권한 부여
==> 접속권한(connect),객체생성권한(resource)
==> 관리자만 부여
     
 grant 권한, 권한2
 to 계정;

예>
        grant connect, resource
        to scott;

* 권한 과 롤 (role)
권한 : 사용자가 특정 작업을 가능하게 할 수 있는것.

권한 종류
a. 시스템 권한 : 관리자만 부여 가능
b. 객체 권한 : 객체를 소유한 사용자가 부여 가능

권한 형태
: create table
: create view
: create index
: drop table
: create session

롤( role )?
==> 권한들의 묶음을 의미.
==> 권한부여 및 취소를 편리하게 하기 위해서....
예> connect, resource

다. person 테이블 생성
--> scott 계정에서
 create table person(
 num NUMBER(4),    -- 숫자
 name VARCHAR(10), -- 이름
 age NUMBER(3),    -- 나이
  address VARCHAR(100) --주소
    );

* default 키워드 사용
==> null 방지 기능 및 특정값 입력 가능한 방법.

   create table person2(
   num NUMBER(4),            -- 숫자
   name VARCHAR2(10),        -- 이름
   age NUMBER(3) DEFAULT 20, -- 나이
   address VARCHAR2(100)     -- 주소
 );

 예 >
   --게시판
 create table board(
  
   writeday DATE DEFAULT SYSDATE,  --작성한 날짜를 항상입력하는게아니라 자동적으로
   ...

 );

10. 데이터 저장
==> insert 문

문법>
 insert into 테이블명 ( 칼럼명, 컬럼명2 )
 values( 값, 값2 );

 => 컬럼명과 값이 일대일 대응.
    지정하지 않은 컬럼에는 null값이 저장됨
예>
 insert into person ( num, name, age )
 values( 10, '홍길동', 20 );
 insert into person ( num, name, age, address )
 values( 11, '이순신', 44, '전라');
 insert into person ( num, name, age )
 values( 12, '유관순', 18, '서울' );

나.
 insert into 테이블명
 values( 값, 값2, 값3, 값4 );
 
   ==> 반드시 테이블의 모든 컬럼에 데이터 저장해야 된다.
              또한 반드시 테이블의 컬럼순서대로 저장해야 된다.

     예>  insert into person
          values(15,'이순신',44,'전라');

 -- 에러난다.
   insert into person
          values('이순신',15,44,'전라');

11. 제약조건 ( constraints )

  가. primary key
    ==> 레코드 식별하기 위해서 특정 컬럼에 부여 가능.
    ==> 자동으로 인덱스 생성된다.
    ==> 제약조건은?
 : 반드시 유일한 값 + null값이 아닌값을 저장해야 된다.
    ==> 일반적으로 테이블당 하나씩 생성한다.
    ==> 문법 >

      가. 컬럼레벨 지정 방식
 ==> 컬럼을 지정시 같이 제약조건 지정하는 방식

 num NUMBER(4) CONSTRAINT 제약조건이름 PRIMARY KEY
   ==> 제약조건이름은 '테이블명_컬럼명_PK'형식을 지정.

 또는
 num NUMBER(4) PRIMARY KEY  ==> SYSXXXX 자동으로 지정.


     예 >
 drop table person purge; 

 create table person3(
   num NUMBER(4) constraint person3_num_PK primary key,   --  숫자
   name VARCHAR2(10),  --이름
   age NUMBER(3) DEFAULT 20,  --나이
   address VARCHAR2(100)  --주소
 );

 insert into person3 ( num, name, age )
        values(10,'이순신',44,);

 insert into person3 ( num ,name, age )
        values(10,'이순신',44);   -- 에러발생(중복값:10)

 insert into person3 ( name, age )
        values('이순신',44); --에러발생(null)

 insert into person3 ( num, name, age )
        values(null,'이순신',44); --에러발생(null)

 


      나. 테이블 레벨 지정 방식
 ==> 컬럼을 모두 지정하고 마지막으로 제약조건 지정하는 방식.

 drop table person purge; 
 create table person4(
   num NUMBER(4),   --  숫자
   name VARCHAR2(10),  --이름
   age NUMBER(3) DEFAULT 20,  --나이
   address VARCHAR2(100),  --주소
   CONSTRAINT person4_num_PK PRIMARY KEY(num)
 );

 

12. DML( insert, delete, update, merge ) 관련 작업 고려 사항
  ==> 요청한 작업이 DB에 반영이 안된 상태이다.
      언제든지 요청작업을 취소가 가능하다.
  ==> 요청작업 확정 : commit
      요청작업 취소 : rollback


  ==> 트랜잭션(transaction)과 관련됨.

    *트랜잭션 정의?
 ==> 작업단위
 ==> '여러 작업들의 묶음'으로서 하나의 작업처럼 처리하는 개념.
 
 예> 계좌이체

        500
   A --------> B    ==>A에서 수정(1000 --> 500 : update)
 1000        B에서 사입(null --> 500 : insert)

 결과 :  성공시 :
            A --------> B
           500         500


  실패시 :
     A --------> B
          1000          0

 ==> 반드시 DML작업은 트랜잭션이 발생된다.
     따라서 트랜잭션을 종료시키는 작업이 필요하다.( commit, rollback )

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

17일차 수업( SQL 종류, Select 문, 계정생성 및 권한부여)

SQL - ( Structured Query Language )

구조화 질의어라고 하며 데이터 정의어(DDL)와 데이터 조작어(DML)를 포함한 데이터베이스용 질의언어(query language)의 일종이다.

특정한 데이터베이스 시스템에 한정되지 않아 널리 사용된다.

 

1) DML ( Data Manipulation Language )
- insert (데이터 삽입)
- delete (데이터 삭제)
- updata (데이터 수정)
- merge  (데이터 병합)
==> 트랜잭션 (transaction) 고려해야 된다.

2) DDL ( Data Definition Language )
- create (객체 생성)
- alter  (객체 수정)
- drop   (객체 제거)

 

3) TCL ( Transaction Control Language )
=> 트랜잭션 관련 명령어
- commit
- rollback

라. 권한할당 / 권한취소
- grant (권한 할당)
- revoke (권한 취소)

마. qurey
- select ( 데이터 조회 )

 

관계형 데이터베이스 
- 데이터를 테이블 형태로 관리하며, 테이블간에 관계를 맺으면서 데이터를 관리하는 방법

- 용어를 잘 이해하고 있어야 한다.

 

열(컬럼)
  이름     나이    주소     ==> 컬럼헤딩
 -----------------------
 박보영     24     증평     ==> 행(레코드 : 자바의 인스턴스)
 김상진     25              ==> 비어있는 컬럼 ( null 값을 갖는다고 표현 )
 다비치     25     경기

 

<제약조건 5가지> => 테이블의 올바른 데이터 설정하기 위해서.

 

가. primary key 제약조건 (PK)
=> 레코드를 식별하기 위해서 특정 컬럼에 지정. (유일하기 때문에)
=> 지정된 컬럼은 반드시 유일한 값을 갖는다.
   또한 null값을 갖지 못한다.
=> 중복데이터 저장을 방지할 수 있다.
=> 예> 주민번호, 사원번호, 학번

나. unique 제약조건 (UK)
=> 컬럼에 유일한 값을 저장하기 위한 제약조건.
   null값 허용.

다. not null 제약조건 (NN) (개체 무결성)
==> 컬럼에 null 값을 허용 안함.

라. check 제약조건 ( CK )
=> 컬럼에 저장할 데이터의 조건체크해서 저장여부 결정

 예> age > 20

마. foreign key 제약조건 ( FK ) (참조 무결성)
=> 다른 테이블의 PK값을 갖거나 또는 null 값을 가질수 있는 제약조건

 

<select 문> 

query 문으로 질의를 던져 원하는 데이터를 조회할 목적으로 사용되는 SQL 문 

 

사용방법에 대해 알아보자.

 

select (컬럼명)

from (테이블명)

where (조건명);

 

* 참고사항 : 데이터베이스에서 ' * ' 모두를 의미한다.

 

기본 구조는 위와 같으며 여러가지 옵션이 존재한다. 지금부터 어떠한 옵션이 있는지 알아보자.

 

1) 논리연산자 : AND ,OR, NOT

2) 범위 연산자 : BETWEEN

ex) where salary between 5000 AND 7000;       -- 5000 ~ 7000 사이의 셀러리 값을 갖는것

 

3) IN 연산자 : 일치하는 값만 검색

ex) where salary IN(2000,4000,6000);               -- 셀러리 값이 2000,4000,6000, 인것을 찾는것

 

4) LIKE 연산자 : 부분적으로 일치하는 값을 검색

%  : 없거나 여러문자 대치
_   : 한문자 대치

 

ex)  이름이 a로 시작하는 사람 검색
      where name LIKE a%';

      이름이 a로 끝나는 사람 검색
      where name LIKE '%a;

      이름에 a문자를 갖는 사람 검색
      where name LIKE '%a%';

      이름이 5글자이고 s끝나는 사람 검색
      where name LIKE '____s';

 

5) IS NULL 연산자와 IS NOT NULL 연산자

where Student_num IS NULL;         -- 학번 값이 NULL 인것을 검색

where Student_num IS NOT NULL;    --  학번 값이 NULL 이 아닌 것을 검색

 

6) 오름차순과 내림차순 연산자

오름차순 : asc, ASC
==> order by 컬럼명 ASC;
내림차순 : desc, DESC
==> order by 컬럼명 DESC;

 

<DDL - Data Definition Language> 데이터를 정의 하는 언어!
- create
- alter
- drop

스키마 ( schema )
: 특정 사용자가 접속해서 생성한 객체들의 대표이름.
: 사용자 개정명과 동일하다.
  스키마라고 하면 계정을 의미한다.

: 스키마는 반드시 소유자가 있다.
  다른 스키마는 접속 불가. ( 권한 없기 때문에 )

==> 스키마.테이블명;

예> select * from hr.employee;  -- hr 스키마의 employees 테이블 접근

 

< 계정 생성 및 권한 부여>

 

먼저 계정생성은 관리자만 가능하다!

생성 하는 방법은 아래와 같다.

 

create user 계정명
identified by 비번;

 

create user man

          identified by 123;

 

이렇게 계정을 생성했으면 권한을 부여를해야한다.

접속권한(connect),객체생성권한(resource)를 부여하는 방법을 예를 들어보자.

               

                grant 권한, 권한2
                    to 계정;

           

          grant connect,resource    -- 접속권한과 객체생선권한을

          to man;                           -- man 계정에게 준다

 

롤( role )?
==> 권한들의 묶음을 의미.
==> 권한부여 및 취소를 편리하게 하기 위해서 사용한다.
예> connect, resource

 

 

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

16일차 수업 ( DataBase install 및 uninstall )

 

1. 데이타베이스( DataBase )

가. 데이터베이스 관리시스템 ( DataBase Management System : DBMS )
- 일반적으로 '데이터베이스'와 혼용해서 사용됨.
- software
- 벤더(vendor)?
=> 오라클, MS, IBM....

- 데이터를 관리하는 시스템 ( 데이터 저장, 수정, 삭제, 조회 등 )

 

나. 데이터 관리 방법
 => 계층형, 망형, 관계형, 객체형..... , 근래 no - sql(근래)
  일반적으로 관계형으로 관리한다.

 

다. 관계형 데이타베이스
  = 데이터를 테이블(table)로 관리하는 방법.

 

라. 오라클 install

 -서비스 등록
컴퓨터 > 관리 > 서비스 ===> 실행 => services.msc

   :xxxxTNSListener
    xxxxServiceORCL 2가지는 반드시 시작해야 된다.

 물리적으로 설치2개됨
  C:/app
  C:\프로그램파일\오라클

 

* uninstall - 지우는 과정이 복잡하니 천천히 알아보자!
가. 서비스 종료
나. 레지스트리 수정
    regedot > xxx Local Machine > SOFTWARE > ORACLE 삭제
                                > SYSTEM > Controlset01 >  Oracle로 시작하는 폴더 모두삭제
다. 재부팅
라. 물리적인 폴더 2개 삭제
   C:/app   (지울시에 용량이 커서 지우는데 오래걸릴수있으니 끈기를 가지고 기다리자 )
   C:\프로그램파일\오라클

 

 

 

=======================

 

 

 

데이타베이스( DataBase )
가. 데이터베이스 관리시스템 ( DataBase Management System : DBMS )
: 일반적으로 '데이터베이스'와 혼용해서 사용됨.
: software
: 벤더(vendor)?
  => 오라클, MS, IBM....

: 데이터를 관리하는 시스템.
  ( 데이터 저장, 수정, 삭제, 조회 등 )

나. 데이터 관리 방법
 => 계층형, 망형, 관계형, 객체형..... , 근래 no - sql(근래)
  일반적으로 관계형으로 관리한다.

다. 관계형 데이타베이스
  = 데이터를 테이블(table)로 관리하는 방법.

라. 오라클 11g 설치

 -서비스 등록
컴퓨터 > 관리 > 서비스 ===> 실행 => services.msc

   :xxxxTNSListener
    xxxxServiceORCL 2가지는 반드시 시작해야 된다.

 물리적으로 설치2개됨
  C:/app
  C:\프로그램파일\오라클

*언인스톨
가. 서비스 종료
나. 레지스트리 수정
    regedot > xxx Local Machine > SOFTWARE > ORACLE 삭제
                                > SYSTEM > Controlset01 >  Oracle로 시작하는 폴더 모두삭제
다. 재부팅
라. 물리적인 폴더 2개 삭제
   C:/app
   C:\프로그램파일\오라클
끝!!!! 

2. 오라클 접속 방법

가. 툴 이용
a. 무료 툴 : 1) SQL*PLUS -> 오라클 설치시 자동설치됨
   관리자 : sys/oracle as sysdba
  일반사용자 : scott/tiger
 
  c:/> sqlplus 사용자계정/비밀번호
 
       2) SQLDveloper - > www.oracle.com.
b. 유료 툴 : Toad, SQLGate, Orange

나. 프로그램 언어 이용
 : 자바로 이용 (JDBC)

 

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

 

 

 

14~15차 수업 (2차원 배열 ,Hashmap,StringTokenizer,사용자 정의 예외처리 )   
 


14~15일차 수업엔 GUI를 배웠고 15일차엔 지금까지 배운 Java를 토대로 테스트를 보자

 

 

<2차원 배열의 합과 평균>

public class AAA {
 public static void main(String[] args) {
     int sum = 0;
     int count = 0;
     int[][] arr = { { 5, 5, 5, 5, 5 }, { 10, 10, 10, 10, 10 },
                       { 20, 20, 20, 20, 20 }, { 30, 30, 30, 30, 30 } };
 
              for (int i = 0; i < arr2.length; i++) {
              for (int j = 0; j < arr[i].length; j++) {
              sum += arr2[i][j];
              count++;
              }
      }
  System.out.println("total = " + sum);
  System.out.println("average = " +(double)sum/count);
 }
}

---------------------------------

<사용자 정의 예외처리문>

package hashmap;

class UserException extends Exception{
 public UserException(String mesg){
  super(mesg);}
}

 

public class Test01 {
 public static void xx(int a) throws UserException{
  if(1==a || a>=11){
   throw new UserException("입력값이 2~9가 아닙니다.");}
 }

 

public static void main(String[] args) {
  int a = Integer.parseInt(args[0]);
  int sum = 0;
  try{
  xx(a);
  if(1<a && 6>a){
   for (int i=0; i<=a; i++) {
    sum += i;
   }
  }
  System.out.println("합계 : " + sum);
  }catch(UserException e){
  System.out.println(e.getMessage());
  }
 }
}

-----------------------------------

<Hashmap,StringTokenizer 을 이용한 예제> - 문자열로된 것을 특정문자로 나누는것

<

package hashmap;

import java.util.StringTokenizer;

 

public class Test02 {

 public static void main(String[] args) {

  String str = "21,33,14";
  int sum = 0;
  float average = 0;

  StringTokenizer token = new StringTokenizer(str, ",");

  for (int i = 1; token.hasMoreElements(); i++) {
   int a = Integer.parseInt(token.nextToken());
   System.out.println(a);
   sum += a;
   average = (float) sum / 3;
  }
  System.out.println("합계 : " + sum);
  System.out.printf("평균 : %.2f", average);

 }

}
 

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

13일차 수업 ( GUI / Frame / Panel ) 

 
1. 자바 GUI ( Graphic User Interface )

 가. AWT ( Abstract Window Toolkit )
 => GUI 컴포넌트를 보여줄때 OS자원을 이용해서 보여진다.
    따라서 Window와 UNIX에서 보여지는 컴포넌트가 다르다.
 => 성능이 떨어진다.

 나. Swing
 => 자신이 가지고 있는 자원을 이용해서 컴퓨넌트를 보여준다.
    따라서 OS와 상관없이 항상 동일한 화면으로 보여진다.
 => 성능이 좋다.

 

2. 레이아웃 매니저
- 컴포넌트들의 위치와 크기를 관리하는 클래스

 => 종류
 - BorderLayout : Frame이 기본적으로 사용하는 레이아웃
   * 5가지 영역 존재
   (Center, North, South, West, East)
   각 영역마다 한개의 컴퓨턴트가 올라간다. 여러개 올려도 마지막으로 올라간 컴포넌트만 보여진다.
   영역을 지정하지 않으면 Cneter에 올라간다.
   * 크기를 resize 하면 위치 변경없고 크기변경됨.

 - FlowLayout : Panel이 기본적으로 사용하는 레이아웃
   * 왼쪽에서 오른쪽으로, 위에서 아래로 올라간다.
   * 크기를 resize하면 크기변경없고 위치변경됨
 - GridLayout : 바둑판

 - CardLayout
 - GridBagLayout

 

4. 이벤트 처리
가. 이벤트(event)
    ==> 사용자에 의해서 발생되는 액션을 의미한다.
    예> 마우스 클릭, 키보드 입력 등..
    ==> 이벤트가 발생되면 행위가 발생된다.
        이런 행위는 메소드가 처리한다.
        이 메소드를 포함하는 클래스가 필요한데 이 클래스를 '이벤트 핸들러' 라고한다.

나. 이벤트 핸들러 ( event handler )
    ==> 이벤트가 발생되었을 때 실제로 처리작업을 구현한 클래스를 의미
    예> 버튼클릭 --> 창닫기
    => 반드시 interFace를 사용해야 된다.
       공통적으로 XXXListener 이름으로 되어있다.
       예> ActionListener, ItemListener

다. 이벤트 소스 ( event source )
-> 실제로 이벤트가 발생된 컴포넌트를 의미한다.

 

4. 중첩 클래스
용도 : 클래스구조를 가지고 있지만 ,다른클래스에서 사용하지 않고 특정 클래스에서만 사용하는 경우로 주로 GUI 이벤트 처리시 사용한다.

 

정의 : 클래스내에 또 다른 클래스가 지정 가능하다. 바깥쪽의 클래스를 Outer 클래스라고 하고,
안쪽의 클래스를 중첩클래스(nested 클래스, inner 클래스)라고 한다.

종류 : 중첩클래스가 Outer클래스의 어떤 위치에 지정되었는가에 따라 4가지로 구성된다.

 

 

<기본 예제> Frame일 이용하여 버튼 만들어보기

 

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;

 

public class FrameTest {

 Frame f;
 Button btnOK;
 Button btnCancel;
 Button btnWest;
 Button btnEast;
 Button btnSouth;


 public FrameTest() {
  f = new Frame("Frame 실습");
  btnOK = new Button("OK");
  btnCancel = new Button("Cancel");
  btnWest = new Button("West");
  btnEast = new Button("East");
  btnSouth = new Button("South");
 }

 public void init() {
  f.setLayout(new FlowLayout());
  f.add(btnOK, "Center");
  f.add(btnCancel, "North");
  f.add(btnWest, "West");
  f.add(btnEast, "East");
  f.add(btnSouth, "South");
  f.setSize(200, 200);
  f.setVisible(true);
 }

 public static void main(String[] args) {
 
  FrameTest t = new FrameTest();
     t.init();
    

 }
}

 

====수업 내용======

 

1. 자바 GUI ( Graphic User Interface )

 가. AWT ( Abstract Window Toolkit )
 => GUI 컴포넌트를 보여줄때 OS자원을 이용해서 보여진다.
    따라서 Window와 UNIX에서 보여지는 컴포넌트가 다르다.
 => 성능이 떨어진다.

 나. Swing
 => 자신이 가지고 있는 자원을 이용해서 컴퓨넌트를 보여준다.
    따라서 OS와 상관없이 항상 동일한 화면으로 보여진다.
 => 성능이 좋다.

2. AWT 의 계층구조

   Component

 Container   일반컴포넌트( Button,Textfield,List,Checkbox,Radio,,)

window  Panel

Frame  Dialog

- 일반컴포넌트는 반드시 Container에 얹혀서 보여진다.
- Panel도 반드시 Window계열 (Frame)에 얹혀서 보여진다.
- Panel은 복잡한 화면구성시 필요하다.

 일반 컴포넌트
 ------------
 Panel  / 일반 컴포넌트
 ----------------------
 Frame

3. 레이아웃 매니저
- 컴포넌트들의 위치와 크기를 관리하는 클래스

 => 종류
 - BorderLayout : Frame이 기본적으로 사용하는 레이아웃
   * 5가지 영역 존재
   (Center, North, South, West, East)
   각 영역마다 한개의 컴퓨턴트가 올라간다. 여러개 올려도 마지막으로 올라간 컴포넌트만 보여진다.
   영역을 지정하지 않으면 Cneter에 올라간다.
   * 크기를 resize 하면 위치 변경없고 크기변경됨.

 - FlowLayout : Panel이 기본적으로 사용하는 레이아웃
   * 왼쪽에서 오른쪽으로, 위에서 아래로 올라간다.
   * 크기를 resize하면 크기변경없고 위치변경됨
 - GridLayout : 바둑판

 - CardLayout
 - GridBagLayout

4. 이벤트 처리

* 용어정리
가. 이벤트(event)
    ==> 사용자에 의해서 발생되는 액션을 의미한다.
    예> 마우스 클릭, 키보드 입력 등..
    ==> 이벤트가 발생되면 행위가 발생된다.
        이런 행위는 메소드가 처리한다.
        이 메소드를 포함하는 클래스가 필요한데 이 클래스를 '이벤트 핸들러' 라고한다.

나. 이벤트 핸들러 ( event handler )
    ==> 이벤트가 발생되었을 때 실제로 처리작업을 구현한 클래스를 의미
    예> 버튼클릭 --> 창닫기
    => 반드시 interFace를 사용해야 된다.
       공통적으로 XXXListener 이름으로 되어있다.
       예> ActionListener, ItemListener

다. 이벤트 소스 ( event source )
-> 실제로 이벤트가 발생된 컴포넌트를 의미한다.

  예> OK 버튼 Cancel 버튼
 Button btnOK = new Button("OK");
 Button btnCancel = new Button("Cancel");

 OK버튼을 클릭 => btnOK 참조변수가 이벤트 소스가 된다.

    =>  이벤트 소스와 이벤트 핸들러 열결시키는 작업이 필요하다.
  예> btnOK.addXXXListener(핸들러클래스); 
   
    => 이벤트 소스 식별하는 방법
      
     - e.getActionCommand(); String
     - e.getSource() : Object

     예>
        Button btnOK = new Button("OK");
 Button btnCancel = new Button("Cancel");

* 이벤트 처리 아키텍쳐


 화면구성 클래스

 Button 생성
 버튼 클릭
 OK버튼 ---------------> 이벤트 핸들러 클래스
     ( System.out.println() 구현 )
      ,반드시 XXListener 인터페이스 구현

5. 이벤트 핸들러 클래스 위치에 따른 이벤트 처리 방법 4가지

 가. 화면구성클래스, 이벤트핸들러 클래스

 예> GUI.java , ButtonHandler.java
    
     public class GUI implemets ActionListener{
     }
 
 나. 화면 구성 클래스에서 처리

    - 자신이 구현
  
 -

6. 중첩 클래스
  용도 : 클래스구조를 가지고 있지만 ,
  다른클래스에서 사용하지 않고 특정 클래스에서만 사용하는 경우.
  주로 GUI 이벤트 처리시 사용한다.


  정의 : 클래스내에 또 다른 클래스가 지정 가능하다.
  바깥쪽의 클래스를 Outer 클래스라고 하고,
  안쪽의 클래스를 중첩클래스(nested 클래스, inner 클래스)라고 한다.

  종류 : 중첩클래스가 Outer클래스의 어떤 위치에 지정되었는가에
  따라 4가지로 구성된다.

 가.member 중첩 클래스
   ==> inner 클래스가 Outer 클래스의 맴버(변수,메소드)처럼 지정된 방식.

 예 >
  public class Outer{
      private int num =10;
      public int getnum(){ return num; }

      class Inner{
       int s=20;
       public void getInfo(){}
       //num 접근가능

      }

     => inner를 사용하기 위해서 반드시 outer클래스부터 객체생성해야 된다.
        예 > Outer o = new Outer();
      Outer.Inner i = o.new Inner();
      i.getInfo();

     => outer 클래스의 private 맴버도

 나. local 중첩 클래스
   ==> inner 클래스가 Outer 클래스의 메소드내에 지정된 방식.
 
 예 > class Outer{
  int num;
  public void getInfo(){
   int size = 10; //로컬변수
   final int kkk =10;
   //로컬 Inner
   class inner{
    public void getXX(){ }
      // size 접근불가
      kkk접근 가능( final 만 접근가능 )
   }

      Inner i = new Inner();
   i.getXX();   

  }
      }

  ==> Outer 메소드내에서 Inner 클래스를 객체생성해야 된다.
      Outer 메소드내의 로컬변수 접근 불가.

 

 다. Static 중첩 클래스
   ==> 중첩클래스가 static 으로 지정된 형태

 예 >
      class Outer{
  int num = 10;
  public void getInfo(){ } 

  //static inner  //먼저 생성이되서 위에num을 쓸수 없는것이다.
  static class Inner{

  }
      }

   ===> Outer클래스의 맴버 접근이 불가능하다.
        이유는 생성시점이 다르다.
        Inner 클래스는 Outer클래스명으로 접근이 가능하다.

 


 라. 익명 클래스
   ==> Outer 클래스내의 inner 클래스이지만,
       이름이 없는 inner 클래스이다.

   ==> 인터페이스, 추상클래스 사용시 주로 사용된다.

 예 > 추상클래스 사용하는 경우
 

 예 >
      일반클래스명 변수명 = new 일반클래스();

 

      추상클래스명 변수명 = new 추상클래스(){

   //추상메소드 구현

      };


      인터페이스명 변수명 = new 인터페이스(){

   //추상메소드 구현

      };

 

 

///////////////////////////////////
* 이클립스 플러그인
  ==> 이클립스에 기본 프로그램외에 추가적인 기능을
      제공하는 방법.
  ==> 자바GUI 개발시 사용 가능한 플로그인
      (windowBuilder)


가.
http://www.eclipse.org/windowbuilder/

나. 다운로드 선택

다. 4.2 link 누르지 말고 오른쪽클릭>속성>주소복사

라. 이클립스에서 help > install New Software 선택

마. Add 버튼 선택후에

 Name : 아무거나

 location : 복사한 주소

  이후에는 Next로 설치.

마지막으로 이클립스 재시작

//////////////////////////////////////

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,