note

오라클 기본 본문

Oracle/기본

오라클 기본

투한 2012. 3. 3. 10:20
/**
 * 1. 데이터베이스
 *  - 데이터베이스(DataBase) 개념
 *   ==> 데이터의 관리를 효율적으로 하기 위해서 모아놓은 데이터 직합.
 * 
 *  - 데이터베이스 관리 시스템(DBMS : DataBase Management System)
 *   ==> software
 *   ==> 오라클, mysql, mssql, db2, sybase, ....
 * 
 *  - 데이터베이스가 데이터를 관리하는 방법?
 *   ==> 테이블 구조로 관리(관계형 데이터 베이스 : Relational DBMS)
 *   ==> 행, 열로 저장.. 
 * 
 *   구조:
 *    클라이언트---->접속----> DBMS(서버)
 *    :툴이용    ---------------------
 *    무료: SQL *Plus,
 *       SQLDeveloper
 *    유료: Toad, SQLGate
 *          테이블(행,열)
 * 
 *    : 프로그램 언어>>>>>>>>>
 *    (자바:jdbc)
 * 
 * 2. SQL *Plus 툴이용해서 데이터 베이스 접속
 *  - DB에 사용자가 존재(계정:사용자)
 *   : 관리자 DBA
 *    ==> sys/oracle
 *    cmd > sqlplus sys/oracle as sysdba (접속1)
 *    cmd > sqlplus / as sysdba(접속2_비번생략)
 *    sql > exit (종료)
 * 
 *   : 사용자 DBA
 *    ==> scott/tiger
 *    cmd > sqlplus scott/tiger (접속1)
 *    sql > exit (종료)
 * 
 * 3. scott 계정으로 접속해서 실행.
 *  - 스키마(schema)?
 *   ==> 특정 계정으로 접속해서 만들수 있는 것(객체)들의 대표이름.
 *   ==> 객체?
 *    - 테이블(Table)
 *    - 뷰(View)
 *    - 시퀀스(Sequence)
 *    - 인덱스(Index)
 *    - 시노님(Synonym)
 *   ==> 스키마 이름은 자동으로 사용자계정과 동일하다.
 *   ==> 다른 스키마에서 접근 불가능.(권한 있으면 접근 가능하다.)
 * 
 * 4. SQL (Structured Query Language)
 *  : 데이터베이스에게 특정 명령을 실행시킬 수 있는 명령어.
 *  : 대소문자 구별이 없다.
 *  : 모든 sql문의 끝은 ; 로 끝난다.
 *  : 연산 가능
 *  : 종류
 *   가. DQL(Data Query Language)
 *    : SELECT문(데이터 조회 시 사용)
 * 
 *   나. DML(Data Manipluation Language)
 *    : 데이터 조작어
 *    : INSERT(데이터 저장)
 *    : DELETE(데이터 삭제)
 *    : UPDATE(데이터 수정)
 *    : MERGE (데이터 병합)
 *   ====> DML 작업은 임시적으로 동작.
 * 
 *   다. DDL(Data Definition Language)
 *    : 데이터 정의어
 *    : CREATE(객체 생성)
 *    : ALTER(객체 수정)
 *    : DROP(객체 삭제)
 *    : TRUNCATE(객체 구조(COULUMN) 삭제 : 데이터 삭제 포함)
 * 
 *   라. DCL(Data Control Language)
 *    : GRANT(권한 부여)
 *    : REVOKE(권한 취소)
 * 
 *   마. DTL(Data Transaction Language)
 *    : COMMIT(실행했던 DML 작업을 확정)
 *    : ROLLBACK(실행했던 DML 작업을 취소)
 * 
 * 5. SELECT 문
 *  - 테이블?
 *   : SELECT * FROM TAB;
 *   : select * from tab;
 * 
 *  - 테이블의 구조(행, 열(컬럼))
 *   sql> desc 테이블명;
 *  
 *  - 테이블의 저장된 데이터
 *   sql> select * from 테이블명;
 **********************************************************8
 * 문법
 *  select [distinct] {*, [컬럼명, 컬럼명2 as 별명]}
 *  from 테이블명;
 * 
 *  - select 컬럼명, 컬럼명2
 *    from 테이블명;
 * 
 *  - select *(모든컬럼 의미)
 *    from 테이블명;
 * 
 *  - select deptno as 부서번호, dname as 부서명, loc 위치
 *    from dept;
 * 
 *  - select sal, sal + 100 from 
 *    from dept;
 * 
 *  - select distinct job //중복제거
 *    from emp;
 *  =======================================>전체 레코드 대상으로 검색이 발생.
 * 
 *  select [distinct] {*, [컬럼명, 컬럼명2 as 별명]}
 *  from 테이블명 where 조건식;
 *  
 *  - where 컬럼명 연산자 값;
 * 
 *  * 식별자
 *   - 시스템정의 식별자
 *    : 키워드
 *    : select, from, where
 *    : 대문자 권장
 *   - 사용자정의 식별자
 *    : 테이블명
 *    : 컬럼명
 *    : 소문자를 권장
 * 
 *  * 값(리터럴)
 *   ==> 대소문자 구별이 있다.
 *   - 수치데이터
 *    : 12, 333, 123.33
 *    : NUMBER(자릿수) ==> 정수형
 *       예> number(4) => 0 ~ 9999
 *      number(4,2) => 0 ~ 99.99
 *      NUMBER(전체자릿수,소수점자릿수) ==> 실수
 *      NUMBER() ==> 유동적으로 변환, 입력하는대로 저장
 * 
 *   - 문자데이터
 *    : 'A', 'AAA'
 *    : char(byte수) ==> 최대 2000byte
 *          ==> 고정길이
 *      varchar2(byte수) ==> 최대 4000byte
 * 
 *   - 날짜데이터
 *    : '1982/12/15'
 *    : Date, timestamp(정밀도)
 * 
 *  * 연산자
 *  가. 비교 연산자
 *   =
 *   >
 *   >=
 *   <
 *   <=
 *   !=
 * 
 *  나. 논리 연산자
 *   AND, OR, NOT
 *   
 *  다.  between A and B ( A와 B  사이 ) <=> not between A and B

       where sal BETWEEN  2000 AND 4000;
       where hiredate BETWEEN  '81/09/28' AND '81/12/28';

           라.  in (값, 값2 ) <=> not in

      where  empno IN ( 333, 2243, 2444 );
     where ename IN ( 'FORD' ,'JAMES' , 'KING' )
     where hiredate IN ( '81/09/28' ,'81/11/17' , '99/05/25' )
 * 
 *  마. like 연산자 <=> not like
 *   ==> =연산자는 동등 연산자이다.(반드시 100%일치)
 *   ==> 한 문자 또는 여러문자열이 일치하면 검색가능.
 *   ==> 2가지 코드를 이용
 *    %(퍼센트) : 없거나 여러문자를 의미
 *    _(언더바) : 한문자를 의미
 * 
 *    <예> ename 에서 A문자로 시작?
 *      where ename like 'A%';
 * 
 *    <예> ename 에서 A문자 포함?
 *      where ename like '%A%';
 *  
 *    <예> ename 에서 A문자로 끝나는?
 *      where ename like '%A';
 *  
 *    <예> ename 에서 A문자가 2번째?
 *      where ename like '_A%';
 * 
 *  바. IS NULL <=> is not null
 *  ==> null 값만 검색
 *   where comm is null;
 * 
 *   * null
 *    : 컬럼에 데이터가 없는 것.
 *    : 연산결과는 null 이다.
 *    : NVL(comm,0) ==> comm이 null이 아니면 그냥 쓰고 null이면 0으로 대체한다.
 * 
 *   * 함수
 *    가. max(컬럼)
 *     : 컬럼값중에서 최대값 구하기
 *     예> select max(sal) from emp;
 *    나.  min(컬럼)
        예> select min(sal) 
            from emp;
      다. sum(컬럼) ,  avg(컬럼)
       예> select sum(sal) , avg(sal)
          from emp;
 *    라. count(컬럼), count(*)
 *     예> comm 받는 사람 수? 
 *      select count(comm) from emp;
 * 
 *     예> 전체 레코드 갯수?
 *      select count(*) from emp;
 * 
 *    마. 형변환 함수
 *     
 *      to_char  to_date
 *     수치--->문자--->날짜
 *        <---    <---
 *      to_number to_char
 * 
 *     예>
 *      select * from dept where deptno = '10'; //'10'이 수치로 자동 형변환
 * 
 *      // to_char (컬럼,[포멧])
 *      예> select hiredate, to_char(hiredate, 'YYYY/MM/DD HH24:MI:SS') from emp;
 *      예> hiredate에 년도?
 *       select hiredate, to_char(hiredate, 'YYYY') from emp;
 *       select hiredate, to_char(hiredate, 'MM') from emp;//월만
 *        
 * 
 *      //to_number(컬럼,[포멧]) //insert할때
 *      예> sal을 첫째 6자리하고,
 *       select sal, to_char(sal,'999,999.99') from emp;
 *       select sal, to_char(sal,'$999,999.99') from emp;
 *       select sal, to_char(sal,'L999,999.99') from emp; //지역화폐
 * 
 *    바. sysdate , systimestamp
 *     ==> 현재 날짜를 구하는 함수이다.
 *      select sysdate, 300+400 from dual; //dual 임시테이블,더미테이블
 * 파일저장
 *  sql>spool test.sql;
 *   .
 *   .
 *  sql>spool off;
 *  저장경로는 sql>exit 했을때 나오는 default경로
 * 
 ***********************************************************************************************
 * 6. 데이터 정렬
 *  : 테이블의 데이터는 랜덤하게 저장 ==> 랜덤하게 검색된다.
 *  : 다중정렬 가능
 *  : 정렬방법
 *   - 오름차순(기본)
 *    : asc
 *   - 내림차순
 *    : desc
 *  : 문법
 *   order by 컬럼명 asc(desc);
 *   ==> select문 맨 마지막;
 *   예> 연봉 많이 받는 순?  
 *    select empno, ename, sal from emp order by sal desc;
 *   예> 입사일 순위?
 *    select empno, ename, hiredate from emp order by hiredate desc;
 *   예> 이름 순?
 *    select empno, ename from emp order by ename asc; //asc 생략가능
 *   예> 이름정렬 후 이름 재정렬
 *    select empno, ename, sal from emp order by sal desc, ename asc; //월급 같은거 끼리 이름순 정렬
 *   예> order by 별명, 인덱스
 *    select empno xx, ename, sal from emp order by xx;
 *    select empno, ename, sal from emp order by 2;
 *      (1)    (2)   (3)
 * 
 * 7. DML
 *  가. INSERT문
 *   : 테이블에 새로운 데이터를 추가할 때 사용한다.
 *   : 문법
 *    - insert into 테이블명(컬럼명,컬럼명2) values(값,값2);
 *     : 권장한다.
 *     : 특정 컬럼에 데이터를 저장하지 않아도 된다.
 *     ==> 지정하지 않은 컬럼의 데이터는 null이 지정된다.(단, 제약조건이 not null이 아닌 경우에만 가능)
 * 
 *    - insert into 테이블명 values(값,값2);
 *     : 모든 컬럼에 데이터를 저장해야 된다.
 *     : 테이블의 컬럼순서대로 저장해야 된다.
 * 
 *  나. UPDATE문
 *   : 테이블의 데이터를 수정.
 *   : 문법
 *    - update 테이블명 set 컬럼명 = 새값, ....;
 *     ==> 전체 레코드가 변경.
 *    - update 테이블명 set 컬럼명 = 새값, .... where 조건식;
 *     ==> 조건에 일치하는 레코드만 변경.
 *  다. DELETE문
 *   : 테이블이 레코드 삭제
 *   : 문법
 *    - delete from 테이블명;
 *     ==> 전체 레코드 삭제
 *    - delete from 테이블명 where 조건식;
 *     ==> 조건에 일치하는 레코드만 삭제.
 * 
 * 8. 트랜젝션(transaction)
 *  : 트랜젝션?
 *   ==> 하나 이상의 DMl로 구성된 논리적인 작업묶음(작업단위)를 의미한다.
 *   ==> 예> 계좌이체(50)
 *  : 특징?
 *   ==> ALL or Nothing (하나라도 실패하면 작업 전으로 돌아감. 즉, 모두 성공해야함)
 *   ==> 트랜잭션 시작(자동으로) ~ 트랜잭션 종료
 *   
 *   * 트랜젝션 종료
 *    - 묵시적인 종료
 *     :
 *    - 명시적인 종료
 *     : commit(물리적인 파일에 반영)
 *     : rollback(메모리에서만 작업이 발생)
 *   : Sql*plus에서 *.dbf에 직접 접근 안한ㄷ. 성능때문이다.(IO발생)
 *   =========>자바는 자동 commit 이다.(auto commit)
 * 
 * 9. 테이블 생성
 *   SKIP!!! (난 테이블은 생성할 줄 압니다.)
 *   create table student(
 *   name varchar2(10),
 *   age number(3) default 20,
 *   address varchar2(200),
 *   birthday date
 *   );
 *   insert into student(name,age,address,birthday) values('홍길동',20,'서울','2012/02/23');
 *   insert into student(name,address,birthday) values('홍길동','서울','2012/02/23');
 * 
 * 10. 제약조건 (constraints)
 *  : 컬럼에 제약조건을 지정한다. (테이블 생성, 나중에 추가가능)
 *  : 데이터 무결성을 보장.
 *  : 종류 5가지
 *   - primary key(pk) => unique + not null
 *    : 하나의 테이블에 하나의 컬럼만 지정 가능.
 *    : 반드시 유일한 값 + 반드시 값을 가져야 된다.(null 안됨)
 *    ==> 중복제거, 식별가능
 *    : 자동으로 인덱스 객체가 자동 생성된다.
 *     (테이블이 삭제되면 인덱스가 자동으로 삭제 된다.)
 *     
 *   - foreign key(fk)
 *    : 여러 테이블간의 관계설정시 사용된다.
 *    : 참조키
 *    : 반드시 참조하는 테이블(mater)의 pk(uk)값 또는 null 값만 가진다.
 * 
 *   - not null(nn)
 *    : 하나의 테이블에 여러 칼럼에 지정가능.
 *    : null값을 허용 안한다. ==> 반드시 값을 저장해야 한다.
 * 
 *   - unique(uk)
 *    : 컬럼의 데이터가 유일한 값. null값 허용 가능.
 *    : 자동으로 인덱스 객체가 생성된다.
 *     (테이블이 삭제되면 인덱스가 자동으로 삭제 된다.)
 * 
 *   - check(ck)
 *    : 특정 컬럼에 조건을 지정가능 하다.
 *     예> check(age>20)
 *    ==> 일반적으로 프로그램(자바)에서 체크한다.
 * 
 *  : 설정 방법 2가지
 *   가. 컬럼 레벨
 *    : 컬럼을 정의시 제약조건을 지정하는 방법
 *   
 *   나. 테이블 레벨
 *    : 컬럼들을 모두 정의한 후에 나중에 제약조건을 지정하는 방법
 * 
 *   : 문법
 * 
 *   create table 테이블명(
 *    컬럼명 데이터형 [constraint 제약조건명] 제약조건,
 *   ); //컬럼 레벨
 * 
 *   create table 테이블명(
 *    컬럼명 데이터형,
 *    컬럼명 데이터형,
 *    [constraint 제약조건명] 제약조건,
 *    [constraint 제약조건명] 제약조건
 *   ); //테이블 레벨
 * 
 *    예>

       create table stu (
          ssn  NUMBER(4) CONSTRAINT  stu_ssn_pk  PRIMARY KEY,
    name VARCHAR2(10)  NOT NULL,
    age  NUMBER(3)  CHECK( age >20 ),
    address VARCHAR2(100)
       );
      
   insert into stu ( ssn , name, age, address )
    values ( 111, '홍길동', 22 , '서울');

   insert into stu ( ssn , name, age, address )
    values ( 111, '홍길동', 22 , '서울');   //pk

   insert into stu ( ssn ,  age, address )
    values ( 222,  22 , '서울');   // not null
 
    insert into stu ( ssn , name, age, address )
    values ( 333, '홍길동', 10 , '서울');  //check 옵셥


      create table stu2 (
          ssn  NUMBER(4), 
    name VARCHAR2(10)  NOT NULL,
    age  NUMBER(3), 
    address VARCHAR2(100),
    CONSTRAINT  stu2_ssn_pk  PRIMARY KEY (ssn),
    CONSTRAINT stu2_age_ck CHECK( age >20 )
       );

       create table stu3 (
          ssn  NUMBER(4), 
    name VARCHAR2(10),
    age  NUMBER(3), 
    address VARCHAR2(100) 
       );
   ==> 제약조건 추가
      alter table stu3
      add CONSTRAINT stu3_ssn_pk PRIMARY KEY(ssn);

      alter table stu3
      add CONSTRAINT stu3_name_nn NOT NULL(name); (X)

      alter table stu3
      modify ( name VARCHAR2(10) CONSTRAINT stu3_name_nn NOT NULL ); (o)


   11. 테이블 삭제

    문법 :   drop table 테이블명 [purge];
 
          
   AAA      drop table AAA;             purge recyclebin;
    테이블 ------------------> 휴지통 ------------> 완전히 삭제
                              (show recyclebin)
           <----------------------
      flashback table AAA to before drop;
  
                     drop table AAA purge;
           -------------- -------------------------->
 * 
 * 12. 시퀀스 (sequence)
 *  : 테이블의 컬럼값을 증가(감소)시키는 객체.
 *  : 문법
 *   create sequence 테이블명_seq; //default 1씩증가 and 무한대 증가, 캐시
 * 
 *   create sequence 테이블_seq(
 *    start with 100,  //100부터
 *    increment by 2,  //2씩증가
 *    maxvalue 1000,  //1000까지
 *    cycle,
 *    nocache    //캐시사용안함
 *   );
 * 
 *  : 2가지 키워드
 *   - 시퀀스이름.nextval ==> 증가
 *   - 시퀀스이름.currval ==> 현재값
 * 
 *  : 실습>
 *   insert into boardtest(num,name) values(boardtest_seq.nextval,'aaa');
 *   insert into boardtest(num,name) values(boardtest_seq.nextval,'bbb');
 * 
 *   drop sequence boardtest_seq;
 * 
 * 13. SQLDeveloper 사용

   : http://www.oracle.com 다운.


   14. JDBC 
   : Java DataBase Connectivity ( JDBC )
   : 기술?
    ==> 데이터베이스와 자바프로그램의 연동기술.
    ==> j2se, j2ee, 안드로이드 상관없이 연동하는 기술( 표준 )
 * 
 *  : 필요한 것들 정리
 *   가. 데이터베이스 설치
 *   나. 데이터베이스의 서비스 실행
 *   다. 드라이버(driver)
 *    ==> 클래스 파일들의 집합(압축파일로 되어있다.)
 *    ==> 자바진영에서 데이터베이스 벤더들에게 인터페이스를 준다.
 *        벤더들은 인터페이스들을 구현한 클래스 파일들을 만든다.
        ( 클래스파일들을 '오라클 드라이버'라고 한다. )
      ==> 데이터베이스를 설치하면 자동으로 포함된다.
          ( C:\oracle\product\10.2.0\db_1\jdbc\lib\ojdbc14_g.jar)

      ==> 드라이버를 찾아서 클래스패스에 추가해야 된다.
          C:\Program Files\Java\jdk1.7.0_02\jre\lib\ext 에 복사
 

     라. 4가지 정보 필요 ( 자바의 문자열로 저장된다. )
        - 드라이버명 ( ojdbc14_g.jar 중에서 핵심 클래스)
         String driver = "oracle.jdbc.driver.OracleDriver";
      
        - 서버 설정값( URL 정보 )
         String url = "jdbc:oracle:thin:@서버아이피:서버포트:데이터베이스명";
         String url = "jdbc:oracle:thin:@localhost:1521:orcl";

        - 계정명
         String userid ="scott";

        - 비밀번호
         String passwd = "tiger";

     마. 드라이버 로딩

         Class.forName( driver );

     바. 연결 ( Connection 맺기 )
   
      Connection  con = DriverManager.getConnection( url  , userid  ,  passwd );
 
     사. SQL 문작성

      String query = "SELECT * from dept";
      String query2 = "insert,delete , update";


     아. sql 문 전송하기 위한 객체생성 ( Statement 생성하고 전송기능 )
   Statement stmt = con.createStatement();


     자. sql 문 전송

      int n = stmt.executeUpdate(query2); // n은 적용된 레코드 갯수

      ResultSet rx = stmt.executeQuery(query);

      * ResultSet 은 테이블을 클래스로 만든거다.
      ==> 포인터를 이용한다.
      ==> 포인터를 내리는 작업( 행 선택 )
          boolean b =  rs.next()
    while( rs.next()){
               int deptno = rs.getInt("deptno");
               String dname = rs.getString("dname");
        String loc = rs.getString("loc");
    }
       ==> 열선택
           int x = rs.getInt("deptno");
           String y = rs.getString("dname");

     차.  자원반납
        : 클래스파일을 close() 한다. 역순으로한다.

          rs.close();
    stmt.close();
    con.close();
   
 * 
 * 15. Statement 종류
 *  : SQL문 전송하는 용도로 사용된다.
 *  : 종류 
 * 
 *   가. Statment
 * 
 *   나. PreparedStatment
 *    : 성능이 좋다.
 *    : 가독성이 좋다.
 * 
 *   다. CallableStatement
 *    : PL/SQL
 *    : 오라클의 프로그램 언어
 * 
 * 
 * 16. 데이터베이스 연동 할때 사용되는 2가지 패턴
 * 
 *  가. DAO 패턴 (Data Access Object)
 *   : 데이터베이스 전담 클래스
 * 
 *  나. DTO 패턴 (Data Transfer Object)
 *   : 데이터 전송 객체
 *   : 일ㅇ반클래스 형태이다.
 *   
 *  다. Connection Pool
 *   : Connection을 반드시 연결해야 되는데 Connection을 맺는 시간이 많이 걸린다.
 *    예> dept를 select ==> 10초가 걸렸다.
 *         ==> Connection 맺는 시간이 8초.
 *   ==> 미리 처음에 Connection을 4개 정도를 미리 맺어서 
 *    특정 클래스(Connection Pool)에 저장한다.
 *    필요하면 특정클래스에 메소드를 호출해서 Connection을 얻어서 사용한다.
 *    사용한 후에 반드시 돌려줘야 한다.
 * 
 * 
 * 17. Connection Pool 기능
 *  : http://jakarta.apache.org 에서 무료로 다운
 * 
 * 
 *  EX>
 * package Connection.pool;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import org.apache.commons.dbcp.BasicDataSource;

public class PoolDAO {
 
 String driver = "oracle.jdbc.driver.OracleDriver";
 String url = "jdbc:oracle:thin:@localhost:1521:orcl";
 String user = "scott";
 String password = "tiger";
 BasicDataSource ds; //내부적으로 pool 기능 포함
 
 public PoolDAO(){
  ds = new BasicDataSource();
     ds.setDriverClassName(driver);
     ds.setUsername(user);
     ds.setPassword(password);
     ds.setUrl(url);
     ds.setInitialSize(4); //초기 커넥션 생성 갯수
     //ds.setMaxActive(4); //최대 쓸수있는 커녁센 갯수
 }//생성자
 
 //select 
 public ArrayList<DeptDTO> select(){
  Connection conn=null;
  PreparedStatement pstmt=null;
  ResultSet rs=null;
  ArrayList<DeptDTO> articleList=null;
  try{
   conn=ds.getConnection();
   String sql="select * from dept";
   pstmt=conn.prepareStatement(sql);
   rs=pstmt.executeQuery();
   
   if(rs.next()){
    articleList=new ArrayList<DeptDTO>();
    while(rs.next()){
     DeptDTO dto = new DeptDTO();
     dto.setDeptno(rs.getInt("deptno"));
     dto.setDname(rs.getString("dname"));
     dto.setLoc(rs.getString("loc"));
     
     articleList.add(dto);
    }
    
    System.out.println("일하는애>>"+ds.getNumActive());//지금 사용되고있는 숫자
    System.out.println("노는애>>"+ds.getNumIdle());//지금 쉬고있는 숫자
   }
  }catch(Exception e){
   e.printStackTrace();
  }finally{
   if(rs!=null)try{rs.close();}catch(Exception e){}
   if(pstmt!=null)try{pstmt.close();}catch(Exception e){}
   if(conn!=null)try{conn.close();}catch(Exception e){}
  }
  
  return articleList;
 }
}

 * 
 *  * 데이터 베이스 전문 프레임워크
 *  ==> 코드로 작성하는 대신 누군가가 해준다.
 *  ==> xml이 기본
 *  ==> 2가지
 *   가. iBATIS ( MyBATIS )
 *    www.ibatis.org
 * 
 *   나. hibernate
 *    www.hibernate.org
 *    ==> 객체 지향적
 *    ==> 어렵다.
 * 
 * 
 * 18. 자바의 트랜젝션 처리
 *  고객삭제?
 *   - customer table에서 고객삭제
 *   - shares 테이블에서 삭제된 고객의 주식 삭제
 * 
 *   기존 : auto커밋이 되어있다. 
 *    try{
 *     deleteMember(ssn);
 *     deleteShares(ssn);
 *    }catch(Exception e){}
 * 
 *   변경 : auto커밋을 해제한다.
 *    try{
 *     conn.setAutoCommit(false); //오토커밋해제
 *     deleteMember(ssn);
 *     deleteShares(ssn);
 *     conn.commit(); //커밋한다.
 *    }catch(Exception e){
 *     conn.rollback();
 *    }finally{
 *     conn.setAutoCommit(true); //오토커밋사용
 *    }
 * 
 * 
 * 19. 메타 데이터(meta data)
 *  : 정의?
 *   ==> 실제 데이터를 관리하기 위한 추가된 데이터를 의미한다.
 * 
 *  : 오라클?
 *   ==> 부서명, 부서번호, 위치 (실제데이터)
 *   ==> 데이터베이스명(orcl), 테이블(dept), deptno, dname, .... (메타데이터)
 * 
 *  : JDBC 에서 2가지 API를 제공한다.
 *   가. DatabaseMetaData
 *    ==> 데이터베이스 관련 메타정보
 *    ==> 벤더이름, 버전, 드라이버명, url, userid, password
 * 
 *   나. ResultSetMetaData
 *    ==> 테이블에 대한 메타정보
 *    ==> 테이블명, 컬럼명, 컬럼갯수, 데이터형 ....
 * */

'Oracle > 기본' 카테고리의 다른 글

ORACLE DATETYPE & UNIQUE & FOREIGN KEY  (0) 2012.03.03
ORACLE Foreign Key 사용  (0) 2012.03.03
ORACLE sql문  (0) 2012.02.13
ORACLE 자동생성 sequence  (0) 2012.02.10
오라클 계정 생성 , 삭제  (0) 2012.02.09