윗부분 생략 (JAVA)
공부 방향
자바에 데이터베이스 연동
- java.sql.* 패키지 사용
- 데이터베이스 설치하고 기본사용법 알아야 자바로 연동가능하다
- 본격적인 오라클은 자바가 완전히 끝난다음에 오라클에 대한 내용볼것이고 가장 기본적 연동에 필요한 SQL 문 설명할것
오라클 데이터베이스 설치 (윈도우 기준)
- 오라클은 https://www.oracle.com/ 으로 가서 다운가능
- 오라클을 설치만 한다면 학원에서만 실습가능 외부에선 안보임
- 학원에서는 강사님 컴으로 ip로 접근해서 강사님 오라클로 접근 가능
오라클 버전
- 최신버전받으려면 용량이 크다. 1G이상
- XE버전의 경우엔 exe 파일만 실행하면 쉽게 설치가능
- 강사님이 주신 경량화된 오라클은 실습으로 쓰기 좋은 XE 버전임, 원래는 공식사이트 Oracle.com 가서 설치해야함
- 설치한 XE버전은 제어판에서 프로그램 추가됨, 제거하고싶으면 제어판에서 제거하면됨
XE버전만 그렇다 다른 버전 Enterprise version이나 등등은 설치도 어렵고 삭제도 어렵다
오라클 설치할떄 주의해야할 사항
기본 DB 관리자 계정 비밀번호 설정
- 설치할떄 기본적으로 데이터베이스관리자 DB 관리자가 두개 만들어져있다
- 오라클이 설치되는 과정에서 자동으로 생성되는 관리자 계정 2개 sys와 system
- 내가 만들지는 않지만 비밀번호는 내가 설정해야함
sys 계정 비번 : oracle
system 계정 비번 : oracle
- 설치시 비번 oracle로 하면 sys와 system 둘다 동일하게 oracle로 설정됨
기본 DB 관리자 계정 (간략)
1. SYS 계정 : 설치시 기본적으로 접속가능 계정, 가장 많은 권한을 가짐
2. SYSTEM 계정 : 설치시 기본적으로 접속가능 계정, 관리하기 위한 계정
3. SCOTT 계정 : 교육용 계정, 활성화 시켜야함, 비번은 tiger
4. HR 계정 : 교육용 계정, 활성화 시켜야함, 비번은 tiger
SCOTT 계정
- 우리는 SCOTT 계정으로 실습할 것
- SCOTT 활성화시키면 테이블 4개와 데이터까지 이미 들어가있음
- SCOTT 계정은 데이터베이스 버전에따라 사용법 다름
- 우리가 쓰는 XE는 비활성화되어있고 안에 테이블 없는 상태, 나중에 활성화시킬것 작업 필요
+ HR계정은 바로 사용가능
설치 경로
- 설치 경로 기본은 C드라이브 하위 OracleEx 폴더 하위에 설치됨
오라클 설치 완료
+ 설치시 문제 생기면 제어판 들어가서 프로그램 제거로 들어가서 목록에 오라클이 나타남, 필요없을때도 지우면됨
- 설치 완료!
오라클 서버 구동 방법, 중지 방법
- 구동은 오라클 설치시 자동 구동된다
필요하지 않을때 중지하는법
- 내 PC 오른쪽마우스 눌러서 [관리] -> [컴퓨터 관리]-> [서비스 및 응용 프로그램] -> [서비스] 메뉴 에서 부팅할때 실행할 서비스, 실행하지 않을 서비스들 목록을 볼 수 있고 수정 가능
- Oracle로 시작하는 5개 중에서 OracleServiceXE와 OracleXETNSListener 구동되어있어야 나중에 클라이언트가 DB에 접근가능함
- 현재는 설치시 자동으로 구동되기때문에 클라이언트가 접속가능함
- 시작유형이 자동이라 되어있으므로 부팅될때 자동으로 구동되는것임, 단 부팅시간 많이 걸림
자동실행 막기
- 오라클 안쓸때는 이걸 수동으로 바꾸면 부팅할때 자동 실행되지 않음
- 오른마우스 해서 중지 누르면됨
- 또는 시작 유형 변경할때 오른버튼 속성으로 들어가서 시작유형을 바꿀수있다(ex) 자동-> 수동)
클라이언트에서 오라클 DB 접속
- 클라이언트가 접속을 하도록 해보자
- 아무 프로그램 설치안하고 기본적인 접속가능하다, 가장 기본적인 접속 방법은 명령프롬프트로 접속
- 현재는 sys와 system 계정에만 들어갈수있다 다른계정은 락이 걸려있으므로 못감
명령 프롬프트 창에서 오라클 DB 접속하기
sqlplus system/oracle
// sqlplus 계정명/비번
- sqlplus 계정명/비번 을 입력하면 오라클의 해당 계정에 접근 가능
- sqlplus 명령이 들어가있는 bin 디렉토리까지 path가 자동으로 잡혀있으므로 바로 쓰면된다
- 오라클은 설치시 경로를 다 잡아준다, bin까지 path를 가장 앞쪽에 잡아놓기 때문에 아무위치에서나 sqlplus로 오라클 접속 가능
+ 자바는 설치시 path 안잡아 주므로 우리가 잡아야한다
- 이후 저 코드를 치면 SQL> 로 바뀜
접속한 계정명 확인
show user
- 현재 접속한 계정명을 알려줌
접속 빠져나오기
exit;
// quit;
- 빠져나올땐 exit; 나 quit; 으로 빠져나올 수 있다, Disconnected 됨
sqlplus 만 입력시
- sqlplus 명령만입력하면 user-name 물어봄 이때 여기에 system이라 입력하고 비번 입력
- 계정명과 비번 맞으면 인증받아서 로그인하게 됨
SYS 계정 접근 하는 방법
- 같은 방법으로 sys계정으로 접속시도시 접속이 안된다
- ERROR 이유 : sys는 오라클에서 가장 많은 권한 가진 유저라서 이렇게 쉽게 접속 불가
- 접속하기 위해 권한을 부여해야함 as sysdba 를 뒤에 붙인다
sqlplus system/oracle as sysdba
- 데이터베이스 설치 복구 등 system 계정으로 하기 힘든일만 sys에서 한다
설치된 오라클 파일 구조
- 오라클은 c드라이브 하위 oraclexe 폴더 하위에 오라클이 설치되어있다
C:\oraclexe\app\oracle\product\11.2.0\server\bin
- bin 디렉토리는 명령어들이 모여있는 디렉토리, sql 명령어 실행파일들이 모여있다
ex) 지금 쓰고있는 sqlplus라는 명령어도 이 bin 디렉토리 안에 있음
ex) 여러 백업이나 복원시 쓰는 명령어도 이 bin 디렉토리에 있음
PATH 관련
- 오라클 설치되는 과정에서 sqlplus 명령이 들어가있는 bin 디렉토리까지 path가 자동으로 잡혀있으므로 명령어를 바로 쓰면된다
- 내PC->[설정] -> [고급 시스템 설정] -> [환경변수]
- 가장 앞쪽에 path설정된거 볼 수 있다
- path 가 C:\oraclexe\app\oracle\product\11.2.0\server\bin 로 잡혀 있음
기본 DB 관리자 계정
SYSTEM, SYS 계정
- 데이터베이스 관리자 줄여서 DBA 계정
- DB를 관리하기 위한 계정임
- 일반적인 용도로는 잘 쓰지 않음, 이 계정으로 실습을 해선 안됨
- 관리를 위한 계정이므로 두 계정으로 들어가면 기본적으로 관리하기 위한 시스템 테이블들이 여러개 만들어져있다
실습을 위한 DB 계정
- 실습이나 프로젝트를 위해서는 다른 일반계정이 필요함
- 일반계정 새로 생성해서 작업하든지 아니면 교육용 제공되는 SCOTT 이나 HR 계정으로 실습많이함
- SCOTT, HR 계정은 실습하기위한 테이블까지 제공되므로 실습을 쉽게할수있다
SCOTT 계정
- SYSTEM, SYS 계정은 관리할때만 쓰고 지금부턴 쓰지 않음. SCOTT 계정으로 실습을 할것이다
- SCOTT 계정은 DB종류에 따라 활성화 시키는 방법이 다르게 되어있다
- 다른 버전은 시스템계정으로 들어가서 스콧계정에 걸린 락을 풀어주기만해도되지만 xe버전은 활성화시키는 방법 복잡함
+ 테이블 보기
- 각 계정별로 기본적으로 테이블들을 가지고있다
- 테이블 목록 보려면
select * from tab;
- 하면 보여줌
+ 테이블 목록확인할땐 ; 빠뜨리면 안됨
- 단 DBA 계정들의 시스템 테이블을 건드리면안된다, 그 테이블은 관리를 위한 테이블이다
ex) sys계정에서 이 명령어 실행하면 몇천개의 시스템 테이블이 나온다
계정 전환하기
- 접속 된 상태에서 다른 계정으로 계정 전환하고 싶으면
connect system/oracle
// connect 변경해야할계정명/비번
- 하면 system 계정으로 계정 전환됨
- connect 대신 conn 까지만 써도 됨
- 단, sys로 갈떄는
connect sys/oracle as sysdba
- 까지 해야 sys계정으로 전환가능
- sys계정은 그냥 갈 수 없음
+ system은 174개정도 테이블 있다
SCOTT 계정 활성화 시키는 방법
+ scott.sql 파일이 필요함
c:\> sqlplus scott/tiger
c:\> sqlplus system/oracle
SQL> @c:\scott.sql
SQL> alter user scott identified by tiger; (alter user 계정명 identified by 비번;)
SQL> conn scott/tiger (scott계정으로 전환)
SQL> select * from tab; (테이블 목록, 4개의 테이블이 보임)
SQL> quit; (종료)
- 가장 먼저 sqlplus 로 system 계정으로 접속한다 비번 oracle
- 접속 되고나면 SQL> 로 바뀜
- 이때 scott.sql 파일을 불러와야함
+ 이 파일을 만약 C드라이브에 저장했으면 @c:\scott.sql 해줌
@ 명령어
- @는 sqlplus 명령어 중 하나임
- @는 확장자가 sql로 되어있는 파일을 실행시켜주는 명령임
- @라는 sqlplus 명령어로 실행시켜라는 의미
scott.sql 파일
- SCOTT 계정 소유의 4개의 테이블을 생성하고 실습을 하기위한 데이터를 Insert시키는 내용이 이 파일안에 있다
- 백업을 해둔 이 파일을 실행하면 4개의 클래스 생성되고 데이터 insert됨
- scott.sql 파일 안에 보면 4개의 테이블 생성하는게 보인다
scott.sql 파일 부분
CREATE TABLE DEPT //부서테이블 생성
CREATE TABLE EMP //사원테이블 생성
INSERT INTO DEPT VALUES('','','','') // DEPT 테이블에 데이터 4개를 insert 시킴
이 INSERT 문이 4개있고
그 다음은
CREATE TABLE BONUS
CREATE TABLE SALGRADE
그리고 SALGRADE안에 데이터를 INSERT 하고 있다
SCOTT 계정 활성화 후 테이블 목록 확인
- DEPT EMP BONUS SALGRADE 4개의 테이블이 만들어져있다
ex) select * from dept; 하면 내부 데이터 보임
SCOTT 계정 활성화 이후
- 이젠 scott계정으로 sqlplus 해서 바로 접속 가능하다
- 현재 3개의 계정(SYS, SYSTEM, SCOTT) 으로 접속가능
파일 시스템 vs DB 서버
파일 시스템
- 파일 단위로 데이터를 관리
- 지금껏 개인들은 파일시스템을 써왔음
- 개인들은 파일로 관리함, 파일이 많아지면 폴더안에 저장함
DB 서버
- DB서버는 모든 유저가 사용해야하기때문에 기존 파일시스템을 쓰면 여러 문제가 발생함
- 데이터를 효율적으로 관리하기 위해서 사용함
파일 시스템의 문제
- 파일시스템은 1차적으로 중복문제가 발생함
ex) 자료실 기능 upload 폴더 안에 lay.jpg 가 저장되면 동일이름 파일 저장못하는 문제
- 데이터 무결성 문제도 발생, 보안성 문제도 발생
-> 데이터 안전관리 위해서 데이터베이스 관리 시스템 (DBMS) 이란걸 쓰게됨
DBMS(DataBase Management System)
- 데이터베이스 관리 시스템
- DBMS 쓰면데이터 효율적이고 안전하게 관리 가능하다
RDBMS
- 관계형 데이터베이스 관리 시스템 (Relational DataBase Management System)
- DBMS 중에 우리가 주로 쓰는 많은 DBMS는 RDBMS
- 가장 일반적인 형태의 DBMS
- 표를 작성해서 데이터를 관리하는 데이터베이스 관리 시스템
- 대표적인 RDBMS 는 Oracle, Sybase, Infomix, MYSQL, Acess, SQL Server
- 우리가 알고있는 많은 데이터베이스들은 거의 관계형 데이터베이스로 되어있다
- 쉽게 작성,확장 가능하고 데이터 관리도 용의함
- RDBMS 는 스키마(표) 가 있고 형식에 맞는 정형데이터만 저장 가능
+ 그 외에도 계층형, 네트워크 형 등 있음
+ NOSQL
- 빅데이터 처리할때는 RDBMS 가 아닌 NOSQL을 쓴다
- Not Only SQL , 빅데이터 저장하기 위한 저장소역할을 하는데 종류가 여러개있다
ex) 몽고DB. 카산드라 등
+ RDBMS 는 스키마(표) 가 있고 형식에 맞는 정형데이터만 저장 가능
- 그에 비해 NOSQL은 정형이 아님 집어넣으면 다 들어감
RDBMS 특징
- 관계형 데이터베이스는 표를 작성한다
- 표제목 = 컬럼, 필드 란 용어를 씀
- 한개의 표는 표제목에 해당되는 컬럼이 있고, 로우(row)가 있다
ex) DEPT는 부서정보 가진 테이블
DEPTNO DNAME LOC
10 ACCOUNTING NEWYORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
- 3개의 컬럼과 4개의 로우로 구성되어있다
- 첫번째 컬럼은 부서번호 DEPTNO가 저장되어있음
- 두번째 컬럼은 부서명 DNAME
- 세번째 컬럼은 부서위치지역LOC
테이블 목록 확인
- select * from tab; 하면 테이블 전체 목록, select * from DEPT 하면 DEPT 테이블 목록 확인 가능
- select문은 SQL 문임 데이터 검색,질의할때 사용, ;를 반드시 찍어야
- SQL문은 대소문자를 구분하지 않는다
SQL(Structured Query Language)
- 데이터베이스에 질의하는 명령어
- 여러 데이터를 검색, 조회, 입력, 수정하기위한 명령어를 SQL 이라고 함
- SQL은 기능에 따라 DML, DCL, DDL 등 나눠짐
- 지금은 자바와 연동하기위한 4,5개 SQL문만 공부할것
DDL SQL문
- 데이터 정의어 (Data Definition Language)
- CREATE, ALTER, DROP, RENAME, TRUNCATE 가 있다
- CREATE : 테이블을 생성하는 역할
+ 오라클은 전역 데이터 베이스 하나만 나눠서 쓰기때문에 따로 데이터베이스 안만들어도됨
+ mysql은 사용자별로 데이터베이스따로 만듬
+ 그때 CREATE는 데이터베이스 만드는것, 오라클인 여기선 그냥 테이블 생성
- ALTER : 테이블 구조 변경
- DROP : 테이블 삭제
- RENAME : 테이블 이름 변경
- TRUNCATE : 한번에 데이터 모두 삭제
DDL (데이터 정의어) 의 CREATE 명령어
- CREATE 명령어를 사용해서 테이블 한개 생성 가장 먼저 해보자
DML (데이터 조작어)
- DDL CREATE 로 테이블이 만들어지고 나면 생성된 테이블에 데이터 입력할땐 INSERT 명령어 써야, 수정은 UPDATE 삭제는 DELETE
- 데이터가 조작이 일어남 그래서 INSERT UPDATE DELETE 를 DML 이라 부림
SELECT 명령어
- SELECT 는 검색을 할떄 사용하는 것
- SELECT 는 아무리 써도 데이터 조작 일어나지 않음 (정처기에선 DML로 분류됨)
- 전체 SQL 문에서 50%이상이 SELECT 가 차지, 가장 복잡함
- 조건들을 만족하는 데이터 검색, 검색된 자료들 정렬, 데이터 전체검색, 테이블 나눠져있을땐 조인을 해야하고, 조건에 맞는 데이터를 10개씩 잘라 출력하기 등 가장 많은 기능가진게 SELECT 임
CRUD
- CREATE TABLE 같은건 콘솔창에서도 해도되고 그래픽프로그램에서도 해도되고 아무곳에서 해도 된다
- 하지만, DML SQL문들은 자바같은 프로그램가지고 직접 코딩을 해야함, 이런걸 CRUD(create read update delete) 작업이라고 함, CRUD SQL문들은 프로그램 상에서 직접 구동해야한다
- Select Insert Update Delete 는 프로그램 상에서 직접 적어서 구동해야
TCL / DCL
- 트랜지션에 관련된 TCL이나 권한에 관련된 데이터제어어 DCL 등도 있다
CREATE 명령어
- 테이블을 생성할때 사용되는 명령어
create table 생성할테이블명 (컬럼명 데이터타입, 컬럼명 데이터타입, ...);
- 데이터타입은 크게 3가지 (숫자,문자,날짜) 있다
+ 데이터타입은 데이터베이스 종류따라 다름
ex) 오라클은 숫자는 number 타입 , 문자는 varchar2 타입, mysql 은 숫자는 int 타입, 문자는 varchar 타입
테이블 생성
create table member01(
id varchar2(20), //20바이트만큼 공간할당하라, 즉 크기임
name varchar2(20), // 이름저장위한 varchar2에 20바이트 공간할당해라
address varchar2(50), //주소저장위한 varchar2에 20바이트 공간 생성해라
phone varchar2(20));
- 하면 member01 테이블 만들어짐
+ 중간에 잘못입력하고 엔터쳤다면 방향키를 이용해 그거 수정하고 엔터치면 됨
오라클의 데이터 타입
- 숫자는 number 타입을 씀 문자는 varchar2 를 주로 쓰고, 문자는 date 나 timestamp 를 사용한다
테이블 목록 보기
select * from tab;
- member01 생성됨을 알수있다
테이블의 스키마(구조) 보기
- describe 명령 사용, 아래 둘 다 가능
describe member01
desc member01
- describe 명령을 사용해서 해당 테이블의 컬럼명들과 데이터 타입을 볼 수 있다
SCOTT 의 DEPT 테이블 구조를 보면서 컬럼 보기
- 컬럼 DEPTNO 에 NOT NULL 되어있고, 타입은 NUMBER(2) , 두 자리까지 저장가능하단 의미 즉 99까지 저장가능하다, 두자리 정수만 저장가능하단 의미
- 컬럼 DNAME는 VARCHAR2(14) , 14바이트까지 저장가능 문자라는 의미
- 컬럼 LOC 는 VARCHAR2(13), 13바이트까지 저장가능한 문자데이터다
오라클의 자료형
- 오라클에서 자료형은 크게 3가지 타입인 숫자, 문자 날짜 로 나뉜다
- 다른 RDBMS도 마찬가지지만 데이터베이스마다 자료형이 다름
oracle | mysql |
number | int |
varchar2 | varchar |
- DDL CREATE로 테이블(표) member01 을 만들어봤다
+ 강의에는 CREATE(데이터베이스 생성) 이라 되어있지만 오라클에선 테이블 생성임
DML
- 만들어진 표에대해 데이터 입력 INSERT, 수정 UPDATE, 삭제 DELETE, 검색 SELECT 을 해보자
- 실제로 데이터 조작함
- 데이터 입력 INSERT, 수정 UPDATE, 삭제 DELETE, 검색 SELECT
- SELECT 는 아무리검색해도 데이터 조작 안일어나지만 DML에 포함
INSERT 명령어
- 데이터 입력시 사용되는 SQL 문, INSERT 는 형식이 2가지가 있다
INSERT SQL 문 형식 2가지
1. 컬럼명을 쓰는 형식, 원하는컬럼만 데이터를 입력할때 사용
insert into 테이블명(컬럼1, 컬럼2,..) values(데이터1, 데이터2,...);
- 컬럼개수와 데이터 개수가 일치해야함
- 컬럼1 자료형에 맞는 데이터1을 써야함
- 원하는 컬럼만 입력할때 쓰는 방식, 50개 컬럼이 있다면 그거 다 안쓰고 원하는 컬럼만 선택적으로 입력시 사용
2 컬럼명을 안쓰는 형식, 모든 컬럼에 데이터를 입력
insert into 테이블명 values(데이터1, 데이터2,...);
- 테이블에 맞는 컬럼 순대로 자료형에 맞는 값들을 모두 입력해야하는게 2번쨰 형식
DML SQL문 수행시 주의
- 문자데이터는 반드시 외따옴표(' ') 로 묶어줘야함
INSERT 명령어로 테이블에 데이터 삽입 (1번째 형식)
- 컬럼 순서가 바뀌어도 상관없지만 바뀐 값들 순서에 맞는 자료형으로 값을 써야함!
- 자료형이 모두 varchar2니까 데이터 삽입시 모든 데이터를 외따옴표로 값을 감싸야함
- 오라클에서 문자는 반드시 ' 외따옴표
- 영문(문자) 데이터는 대소문자 구분함
- 오라클은 대소문자 구분안하지만 유일하게 문자데이터는 대소문자 구분함! 즉 ' ' 안에 들어간건 대소문자 구분됨
SELECT 명령어로 테이블의 데이터 확인
- member01에 있는 모든 데이터를 검색하라는 의미이다
INSERT 명령어로 테이블에 데이터 삽입 (2번째 형식)
- 두번째 형식으로 INSERT 해보자
- 컬럼명을 안쓰지만 모든컬럼을 순서대로 맞는 자료형의 값을 써야함
- CREATE 할때 크기 설정을 20바이트로 했다면 20바이트 내의 데이터만 입력되고 20바이트가 넘는 데이터는 INSERT 되지 않는다
SELECT 명령어로 테이블의 데이터 확인
- 영문 데이터는 대소문자 구분, 문자 데이터는 ' ' 안에 !
UPDATE 명령어
- 데이터를 수정할때 사용되는 명령어
UPDATE SQL 문 형식
update 테이블명 set 컬럼1=수정할값1,
컬럼2=수정할값2,...
where 조건절;
- 수정하고 싶은 데이터만큼 늘려서 작성하면 된다
- 마지막 수정할값뒤에는 , 안쓰기
where 조건절
- 원하는 데이터만 수정하기위해서 where 조건절을 씀, 비교연산자로 조건절을 쓰게됨(> ,<, <=, >=)
- 조건절을 만족한 데이터만 수정가능하다
- where 조건절이 없으면 모든 데이터가 한꺼번에 수정됨
오라클에서의 비교연산자
= : 같다
<> , !=, ^= : 다르다
- 자바랑 다름을 주의
- 보통은 where 조건절에 비교연산자를 쓰는게 일반적
UPDATE 명령어로 데이터 수정
- 'toto'란 사람의 주소를 '인천시' 였는데 '제주도' 로 바꾸자
update member01 set Address = '제주시'
- 하면 모든 데이터가 '제주시'로 바뀌므로 where 조건절써서 id값이 'toto'인 회원만 이라는 조건달기
update member01 set Address = '제주시' where ID = 'toto';
SELECT 명령어로 조건에 맞는 데이터만 검색
- SELECT문도 WHERE조건절 써서 id값이 'toto'인 회원만 검색하기 가능
- WHERE 조건절은 INSERT 를 제외한 나머지 명령어에 쓸 수 있음 DELETE, UPDATE 시 사용 가능
DELETE 명령어
- 데이터를 삭제할때 사용되는 명령어
delete from 테이블명 where 조건절;
- DELETE FROM 테이블명 까지 쓰면 테이블 안의 모든 데이터를 삭제함
- DELETE 문에 WHERE써서 원하는 조건만 삭제
DELETE 명령어로 특정 데이터 지우기 1
- id값이 'toto'인 데이터를 지우자
+ 데이터가 삭제되었는지 SELECT 문으로 확인
DELETE 명령어로 특정 데이터 지우기 2
- id값이 'test'인 데이터도 지우자
자바 - 오라클 연동
- 이클립스를 사용해서 자바에서 오라클로 연동해보자
- 자바 - 오라클은 그냥 연동이 안됨 자바는 오라클을 모르므로 접속을 어떻게 할지 모른다
- 자바는 오라클에 대한 정보를 가지고있지 않으므로 오라클 사 에서 만든 드라이브를 자바에게 알려줘야함
- 자바 - 오라클 사이 중간에 드라이브가 필요하다
JDBC Driver
- 중간 연동을 위해서는 JDBC Driver 가 필요함, 이 드라이버가 있어야만 자바는 접속정보를 받을 수있음
- 이 드라이버는 데이터베이스 회사에서 제공함(Oracle사)
- Oracle용 JDBC Driver를 오라클 홈페이지에서 구하거나 설치시 제공되는걸 사용
- 이 JDBC Driver 이름이 ojdbc6.jar 이다, 오라클 설치될떄 JDBC Driver 인 ojdbc6.jar 도 같이 설치됐다
- 자바 연동 방법 : 이 드라이버 파일 ojdbc6 를 자바가 설치된곳에 저장한다, 그럼 이 드라이버가 이클립스 상에서 보임
+ 만약 mysql 과 연동할땐 mysql용 드라이버를 구해야함 (데이터베이스 만든회사에서 드라이버를 제공)
++
운영체제는 그래픽카드 모름, 그래픽카드 회사에서 드라이버를 만들어서 알려줌, 그거처럼 여기서도 마찬가지
자바 - 오라클 연동 방법
1. 가장 먼저 JDBC Driver를 구해야함
- 오라클이 설치된곳에 드라이버 여러개 있다. 그 중 현재 ojdbc6.jar 를 쓸 것
- c:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib 안에 ojdbc5, ojdbc6, ojdbc6_g 있음
2. 이 드라이버를 자바가 설치된곳 jre/lib/ext 폴더 아래에 드라이버 ojdbc6.jar 를 넣는다
- ojdbc6.jar를 복사해서 자바가 설치된 c:\Program Files\java\jre1.8.0_231\lib\ext 안에 넣는다
- lib 폴더 하위에 저장해야만 따로 클래스 path 를 잡아주지 않아도 이 드라이버 파일이 이클립스에서 보인다
- 다른곳에 넣으면 클래스 path를 따로 잡아줘야함
+ 현재 오라클용 JDBC Driver 는 클라우드 폴더에도 있고, 홈페이지에서도 구할수있고, 오라클 설치된곳에 가도 있다
3. 이클립스에서 JDBC Driver 인 ojdbc6.jar 가 보이는지 확인한다
- 이클립스에서 ojdbc6.jar가 보인다
4. 자바 - 오라클 연동 테스트
- 자바 - 오라클 연동 테스트를 위한 두개의 테스트 파일 있다
- JDBC_Connect01.java 와 JDBC_Connect02.java
- 연동테스트를 성공해야만 나중에 SQL문으로 데이터를 처리 가능
자바 - 오라클 연동 테스트 : 예제 1
- JDBC 드라이버가 로딩이 되는가만 테스트하는 코드임
- JDBC_Connect01.java
package p2022_07_14;
import java.sql.*;
public class JDBC_Connect01 {
public static void main(String[] args) {
/** ORACLE JDBC Driver Test ***************************/
String driver = "oracle.jdbc.driver.OracleDriver";
/******************************************************/
/** My-SQL JDBC Driver Test **************************/
// String driver ="com.mysql.jdbc.Driver";
/*****************************************************/
try {
Class.forName(driver); //JDBC Driver Loading
System.out.println("JDBC Driver Loading 성공~!!");
} catch (Exception e) {
System.out.println("JDBC Driver Loading 실패~!!");
e.printStackTrace();
}
}
}
코드 하나씩 살펴보기 1
String driver = "oracle.jdbc.driver.OracleDriver";
- 오라클 JDBC Driver 경로를 변수 driver 에 저장
- oracle.jdbc.driver 까지가 패키지명, OracleDriver 가 클래스명
- 가져왔던 ojdbc6.jar 의 압축을 풀면 oracle.jdbc.driver 라는 패키지가 있고, 그 안에 클래스 OracleDriver.class 가 있다
코드 하나씩 살펴보기 2
Class.forName(driver);
- 클래스 이름이 Class 이다, java.lang 안의 Class 클래스
- forName() 은 정적메소드, 메소드 매개변수로 driver 변수로 저장되었던 JDBC Driver 를 로딩함
- JDBC Driver 가 로딩 안되면, 예외발생시 catch로 간다
- JDBC Driver 가 로딩 된다면, 성공 메세지 뿌림
- 자바 - 오라클 연동 코드에서 예외처리를 반드시 해야함, try-catch-finally를 써서 주로 예외처리를 한다
- Class.forName() 은 try안에 예외발생할 가능성있는 문장
자바 - 오라클 연동 테스트 : 예제 2
- JDBC 드라이버 로딩 테스트만 했던 이전 예제와 달리, JDBC Driver 로딩도 하고 DB 접속도 한다
- JDBC_Connect02.java
package p2022_07_14;
import java.sql.*;
public class JDBC_Connect02 {
public static void main(String[] args) {
/** ORACLE JDBC Driver Test *****************************************/
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:xe";
/*******************************************************************/
/** My-SQL JDBC Driver *********************************************/
// String driver ="com.mysql.jdbc.Driver";
// String url = "jdbc:mysql://localhost/academy";
/*******************************************************************/
Connection con = null;
try {
Class.forName(driver);
/** ORACLE에서 Connection 객체 ***********************************/
con = DriverManager.getConnection(url, "scott", "tiger");
/*******************************************************************/
/** My-SQL에서 Connection 객체 ***********************************/
// con = DriverManager.getConnection(url, "totoro", "1234" );
/*******************************************************************/
System.out.println("데이터베이스 연결 성공~!!");
} catch (Exception e) {
System.out.println("데이터베이스 연결 실패~!!");
e.printStackTrace();
} finally {
try {
if (con != null)
con.close();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
}
코드 하나씩 살펴보기 1
/** ORACLE JDBC Driver Test *****************************************/
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:xe";
<driver 변수>
- String driver = "oracle.jdbc.driver.OracleDriver"; 그대로 수정안해도 된다
<url 변수>
1. localhost는 현재 자바와 오라클이 같은 ip를 가지고 있으므로 local로 접속하는것이다
- 만약, 오라클이 원격으로 떨어져있으면 오라클 설치된 컴의 ip주소 나 도메인명을 써야함
- 현재 localhost 자리에 타인의 컴 ip 주소를 쓰면 이클립스에서 자바 프로그램으로 타인의오라클 DB 에 접속 가능 (타인의 컴퓨터 방화벽이 풀어있어야함)
2. 1521 은 포트번호, 여기도 소켓통신하므로 IP주소와 포트번호를 가지고 찾아가서 해당 소켓을 연결함
- IP주소와 포트번호까지 일치되어야만 소켓을 연결해서 통신가능
3. 변수 url 에는 우리가 사용하게 될 데이터베이스의 정보를 설정한다
- xe 는 우리가 사용하게 될 오라클의 전역 데이터베이스 이름이다
- 지금 버전에 맞게, 맨 마지막의 orcl 대신 xe로 수정
오라클 버전 별 데이터베이스 이름
- XE 버전은 기본값이 xe, 전역 데이터베이스 이름이 xe 이다
코드 하나씩 살펴보기 2 (JDBC Driver 로딩)
Class.forName(driver);
- Class.forName() 메소드로 오라클용 JDBC 드라이버를 메모리상으로 로딩, 이 로딩을 가장 먼저 해야한다
- 예외처리 필수인 코드, 안하면 오류 발생 (db연동과 입출력은 예외처리 필수)
- 클래스명이 Class, 정적메소드인 forName()
+ try-catch-finally 반드시 예외처리 해야하는 형식임
코드 하나씩 살펴보기 3 (Connection 객체 생성)
con = DriverManager.getConnection(url, "scott", "tiger");
- DB 접속 코드
- java.sql 의 클래스인 DriverManager 클래스를 통해서 getConnection() 정적메소드를 호출함
- 이 메소드는 메소드 오버로딩되어있고, 지금은 매개변수 3개짜리 쓰고있다
java.sql.DriverManger 클래스
- 드라이버를 관리하는 클래스임
- getConnection() 메소드 메소드 오버로딩 되어있는거 볼수있다
- 그 중 static Connection getConnection(String url, String user, String passward) 사용
1) 첫번째 매개변수 url 은 데이터베이스 url 정보, 오라클에선 xe 전역 데이터베이스를 쓰므로 xe 만 작성
2) 두번째 매개변수 "scott" 는 전역 데이터 들어가기위한 유저계정, 현재 scott 계정 사용
3) 세번째 매개변수 "tiger" 즉 그 계정의 패스워드
- 이 세가지 매개변수 정보가 일치하면 Connection 객체가 생성된다
DB 연동시 공통적으로 들어갈 기본적인 내용
1. JDBC Driver 로딩
2. Connection 객체 생성
- 이 두 내용은 DB 연동시 반드시 공통적으로 들어간다
- 현재 JDBC_Connect02.java 실행해서 성공나오면 기본적인 연동을위한 준비가 다 된것
- DB 연동하는 방법은 순서와 기본형식틀이 정해져있다
- 지금 예제에선 연결하는 것만 했음
- 접속이 되면 우리가 배웠던 SQL 을 try문 써서 수행한다
catch 와 finally 에 들어갈 내용
1. 위 예제의 catch문 에서 오류출력하는 3가지 중 한가지인 e.printStarctTrace() 를 사용
2. 위 예제의 finallly문에서 생성된 객체를 닫고있다, 이때 finally에서 그냥 끊으면 예외발생하므로 그냥 끊으면 안됨
- 이 finally문 안에서 또 try 써서 Connection 객체가 null 값이 아니라면, 즉 Connection 객체가 생성되었다면 con.close()로 데이터베이스와의 연결을 끊게됨
- DB접속하기위한 기본적인 테스트 끝났다
- JDBC 드라이버 로딩, Connection 객체 생성 이 두개를 반드시 성공해야 나머지 sql 문 수행가능
자바연동 예제
- 예1 폴더
- 생성할 테이블 customer
create table customer( no number(4) primary key,
name varchar2(20),
email varchar2(20),
tel varchar2(20) );
- DDL인 이 작업을 가장 먼저 해야한다
- DDL SQL 문은 여러 곳에서 사용가능. 콘솔창에서 해도되고 , 다른 툴로 해도되고, 이클립스에서 해도됨
- no 컬럼 : 4자리 정수 저장하는 정수형, primary key 이므로 반드시 값을 입력해야하고 중복된 값을 저장할 수 없다
- primary key : 중복된값 저장불가, 값 입력하지 않은 null 값을 허용 안함
+ 이런걸 제약조건이라고 한다, no 컬럼에 아무값이나 입력하지 못하도록함
- varchar2(20)인 name,email,tel 컬럼 생성
+ 제약조건
- primary key, not null, unique key, foreign key 등을 제약조건이라고 함
- 제약조건 위반된 값을 못 넣게함
- 제약조건은 컬럼 단위로 제약조건 설정하는것임
- 이후 데이터 입력/검색/수정/삭제 하기 위한 java 파일들이 있다. 각 파일에서 4가지의 SQL문을 수행하고있음
테이블 생성
- customer 테이블을 이클립스에서 DB연동 해서 DDL create로 테이블 만들어보자
이클립스로 DB 연동하는 방법
- Window-> Show View -> Other -> Data Management 폴더 하위 Data Source Explorer 선택 후 Open 버튼누르기
- 그럼 Data Source Explorer 창이 나타남
- 거기서 Database Connections 폴더 선택 -> 오른마우스해서 new선택
- mysql orcle sql server 등등 여러 데이터베이스와 이클립스를 연결시킬수있다
- 이 중에서 Oracle을 선택후 아래쪽에 Connection 이름명을 New Oracle(scott) 이라고 계정명을 붙여서 써주자
- 나중에 커넥션많아지면 어떤 계정으로 커넥션 연결됐는지 구분힘드므로 계정명 설정
- Next
- 우측 New Driver Definition 메뉴 클릭시 탭이 3개인 창 새로운창이 뜬다
- 3개의 탭에서 일일히 설정해야함
1. 첫번째 탭은 용하게될 데이터베이스 네임값과 타입을 선택함, 여기서 데이터베이스 종류를 선택함
- 우리가 설치한 오라클 버전으로 Oracle Thin Driver 선택, 시스템버전은11
2. 두번째 탭 JAR List에서 이전 jar파일 clear All하고 Add JAR/Zip.. 눌러서 오라클용 JDBC 드라이버 가져오기
- ojdbc6.jar 는 오라클 설치된곳또는 자바 설치된곳에 있으므로 거기 찾아가서 ojdbc6.jar 가져오기
- 한번 경로 설정해두면 SQL문 결과를바로확인하는등 아주 편하게 쓸 수 있음
3, 세번째 탭 Properties란 탭 들어가서 DB 관련 내용을 수정해야함
- Connection URL 부분은 jdbc:oracle:thin:@localhost:1521:xe 로 수정
- Database Name 부분은 xe로 수정
- passward 는 tiger
- UserID는 scott
- 다음으로 OK 버튼 눌러서 넘어가면 그 다음 Save password 체크
- Test Connection 버튼 눌렀을떄 Ping succeeded 메세지 나와야 연결 설정 잘 된것
-> Finish
- Finsh 후에 Data Source Exploer에 xe가 뜬다
- 만약 뭐 수정하고싶으면 New Oracle(scott) 에 오른마우스 -> Properties하면 아까 설정했던 그 화면이 나타남
- 좌측 하단에 현재 접속이되었는지 상태 나타남
- (Connected) 는 현재 접속된 상태
- 연결 끊고싶으면 현재 커넥션인 New Oracle(scott)에 오른마우스 - Disconnect 누르면 됨
- 다시 연결할땐 커넥션 더블클릭 또는 오른마우스 - Connect
이클립스에서 DB 접속해서 SQL문 사용하는 방법
1. .sql 파일 생성
- src 폴더 하위에 SQL이란 폴더를 만들고 그 하위에 myOracle.sql 파일을 추가하자
확장자가 sql 인 파일 만드는 방법
- 폴더누르고 오른버튼 -> new에 Other 눌러서 -> SQL Development 폴더 안의 SQL File 누르기
- 이렇게해야 확장자가 sql인 파일 만들어줌
- 파일명은 MyOracle 로 했다
2 MyOracle.sql 에서 Connection profile을 선택
- 첫번째는 타입, 우리가 사용하는 데이터베이스 종류 Oracle_11선택
- 두번째는 커넥션 이름 선택, New Oracle(scott) 선택한다
- 세번쨰로 데이터베이스 이름은 xe 선택
- 여기까지 하고 좌측 상단 디스켓모양 눌러서 저장
- 이클립스에서 오라클로 연결 완료, 여기서 작업을 다 할 수 있다
- '--' 가 주석이다
SQL 문 실행하는 방법 2가지
1. 블럭을 잡아서 오른버튼눌러서 실행하는 명령인 Execute Selected Text 클릭
2. 블럭잡고 Alt+ X 단축키 누르기
3. SQL문 실행 : 테이블 목록 확인
select * from tab; -- 테이블 목록(현재 계정 소유의 테이블 목록을 보여달라는 것)
- 으로 해당 계정의 테이블 목록 확인 가능
- 실행시 아래쪽에 검색된 내용 보여줌
- Result1 탭에 scott 계정 테이블 소유 목록을 보여줌
4. SQL문 실행 : 테이블 생성
이클립스에서 DB 접속해서 자바 - 오라클 연결하는 예제
- 네이버 클라우더의 '예1' 폴더 안의 테이블 구조를 가져오자
create table customer( no number(4) primary key,
name varchar2(20),
email varchar2(20),
tel varchar2(20) );
- 위 create 문을 MyOracle.sql 로 가져와서, 블럭잡고 Alt + X 단축키로 실행
- 그 후 select * from tab; 으로 보면 customer 테이블이 보임
+ 명령프롬프트에서 desc 로 테이블 구조 확인 가능
desc customer
- MyOracle.sql 전체 코드
select * from tab; -- 테이블 목록
select * from member01;
--예1.
-- primary key(기본키) : 반드시 중복되지 않는 값을 저장 해야한다는 의미
create table customer( no number(4) primary key,
name varchar2(20),
email varchar2(20),
tel varchar2(20) );
- 데이터 원하는 형태로 쉽게 제어하기위해서 테이블 만들때 primary key 로 설정된 컬럼이 한개 필요함
- DB 작업 끝났다
- 나머지는 자바 프로그램으로 insert, select 등 해서 수정, 삭제, 삽입 등 자바에서 처리
- 내일은 예1 폴더의 파일들을 가져와서 연동시킬거 JDBC_Delete, JDBC_Update 등의 파일을 살펴볼 것
'국비지원 과정 > Oracle' 카테고리의 다른 글
코딩 22일 / 2022.07.20 / WHERE 조건절, 비교연산자, 논리연산자, LIKE 연산자, 와일드카드, 정렬 (0) | 2022.08.01 |
---|---|
코딩 21일 / 2022.07.19 / SQL Developer 툴, Oracle SQL문 기초 (0) | 2022.07.29 |