오라클이란 ?

DBMS제품들 중에 하나

 

DBMS는 ?

DB를 관리하는 시스템

 

DB?

데이터를 모아놓은 데이터 집합

 

DB를 직접 사용 할 수있나요 ?

no

 

DB를 MS를 이용해서 간접적으로 사용할때 어떤 방법으로 사용하나요 ?

명령어SQL를 이용

 

SQL의 구성3가지 ?

1. 데이터정의 DDL : create / alter/drop

2. 데이터조작 DML : select / insert/update/ delete

3. 데이터제어 DCL : grant/ revoke(허가)

 

DDL을 위해서 알아야할 내용으로 자료형 :

문자열(char/varchar2/nchar/nvarchar/long/clob/nclob

숫자:number

날짜:timestemp/ date

 

null은 값이다. 비어있는게 아니라서 비교가가능하다.

                   

데이터수정 

UPDATE [테이블명] SET [변경할 내용] WHERE [조건];

COMMIT; 하기. 커밋/롤백을 안하면 해당레코드가 홀딩되어있어서 다른사람이 접근불가.

UPDATE MEMBER SET PWD ='222' WHERE NICNAME ='TUE';
COMMIT;--INSERT후 저장소에 저장

--DELETE MEMBER;모든데이터삭제
DELETE MEMBER WHERE ID='21';--특정 레코드만설정

INSERT INTO MEMBER(ID, NICNAME, PWD)--데이터삽입
VALUES(21,'TUE'  ,'111');

--ROLLBACK;--커밋안했던것취소
SELECT * FROM MEMBER ORDER BY ID;--ID로 정렬하기
SELECT * FROM MEMBER;--MEMBER에서 모든컬럼을가져와
SELECT MEMBER.* FROM MEMBER;

SELECT ID, NAME, PWD FROM MEMBER; --원하는컬럼만 원하는 순서대로 조회,테이블이 여러개면 어떤테이블인지정.테이블이하나면 생략가능
SELECT ID AS MEMBER_ID, NAME, PWD AS PASSWORD FROM MEMBER;--원하는 컬럼을 원하는 별칭으로조회
SELECT ID MEMBER_ID, NAME, PWD PASSWORD FROM MEMBER;--AS생략가능
SELECT ID "USER ID", NAME, PWD PASSWORD FROM MEMBER;--AS생략가능, 빈공간""로 묶기

--UPDATE MEMBER SET PWD='111';--모든사용자의 비밀번호를 바꾸는것, 필히 WHERE조건절넣을것,누구도 레코드에 손댈수없다,커밋이나 롤백할때까지

 

JDBC 데이터베이스를 사용하기위해 api필요

뒷단에는 sql을 이용해서 데이터를 dbms에 저장

  • 오라클과 MS sqld의 api 함수이름이 다르다.
  • 데이터베이스의 연결을 위한 함수를 바꿔야한다. (벤더가달라서,,)
  • 기능을 단일화시킬수있는 돼지코를 ㅈ바ㅏ에서 제공
  • sql을 사용해서 db에 넣어야함.
  • 사용자입력 -> SQL(빈칸에들어감) -> DB

JDBC Driver

구동장치는 jdbc드라이버임.

jdbc는 껍데기

콘솔용어플리케이션임 , 자바프로그램만드는중 , 웹이아니다. (자바프로젝트에서도가능한것..)

 

스프링이 사용하는 버전이 1.8

클래스명외우기

new라는 키워드가 객체생성하는 유일한방법이아니었다.

연결됐으면 연결된객체통해서 객체를반환해준다.

ctrl shift o ->import

다른 패키지에 있는 클래스를 사용하기 위해서는 import 키워드를 이용한다.

DriverManager : 드라이버로드
Connection // 드라이버매니저를 통해서 Connection 만듦, import
Statement st = con.createStatement(); // 안쪽에서 new해서 만들어진 객체 반환
Resultset rs = st.executeQuery(sql); // st를 실행하면 실행한것을 통해서 결과집합객체만듦

Class.forName("oracle.jdbc.OracleDriver");

톰캣에서 문서를가져와서 객체화하려면 ..

  • 문자열로 읽어온것을 객체화해야함(자바코드가 아니기때문)
  • 자바플랫폼에서지원 -> Class cls = Class.forName("문자열")
  • Class.forName() : 문자열을 가지고 문자열에  해당되는 클래스정보를 얻어서 클래스안에있는 모든것을 분석해낼 수 있는도구
  • 소스코드는 하나의 문자열이다
  • 소스코드의 규칙이있다. 자바의규칙, 자바스크립트의 규칙 등
  • 코드들이 내부는 숫자로되어있다.

 

  • RTTI (Runtime type information) : 런타임 타입의 정보를 알아낼 수 있다.
  • 코드에서 객체나 메소드,필드등 포함해서 읽어볼 수있다.
  • getMethod() 메소드배열을 가져오는 구조체,

메소드나 속성 메소드인자들을 꺼내볼 수있다.

문자열을 읽어온것을 가지고 타입정보를 알아 낼수도있고,

newInstance();로 객체를 만들 수도있다.

Class cls = Class.forName("com.newlecture.web.Lotto");
Lotto lotto = (Lotto)cls.getDeclaredConstructor().newInstance();

문자열로 읽어온것을 객체화하고싶다면 ? (톰캣처럼)

new연산자쓸 수 없다. Class.forName("")사용

 

드라이버를 생성하는 코드 

실제로 new하는건아닌데, 드라이버매니저가 오라클드라비어객체를 반환해주지 ?

DriverManager.getConnection(null)

OracleDriver 클래스안에 생성자는 static생성자이다. static이기때문에 "oracle.jdbc.OracleDriver"인식이 되는 순간 저절로 호출된다.

생성자 안에 이미 자식객체를 생성하며 부모객체를 참조하고,

 

스태틱이라서 진행되는순간 자동실행


인스턴스변수 : 객체생성할때마다 값이 달라짐, 로또size는 항상일정하다.똑같은것을 개별적으로만들필요가없다.->전역변수

Lotto lotto = new Lotto()생성시 4바이트만 할당(인스턴스변수 1개)

모든객체가 동일한값을 쓰면 객체생성할때마다 인스턴스변수를 만들필요가없다.

모든객체가 static 하나가지고쓴다.

  • static은 객체와상관없이 불러올수있다.
  • 100개의 객체가 만들어져도 1개의 전역변수사용
  • 메모리절약가능
  • 프로그램이 실행되자마자 실행됨
  • new와상관없이 생성
  • 객체생성자:객체만들때만생성
  • static{ } 생성자, 클래스에 접근만하면 실행되는것,한번만 실행
  • static 변수는 계속접근가능

클래스의 속성과 메서드에 static 키워드를 사용하면 어디서나 속성과 메서드를 공유할 수 있다.

+ Recent posts