[SIST] JDBC_days01

2022. 5. 2. 22:19·TIL/JDBC
728x90
반응형

오늘은 오전에 오라클로 DB 모델링했던 프로젝트를 발표하였고 오후부터 JDBC 수업을 시작하였다.

수업에 사용하는 jdk와 jre version는 1.8이라 1.8로 지정해주고 인코딩도 UTF-8로 변경한 뒤 수업을 시작하였다!

1. JDBC

1) [J]ava [D]ata [B]ase [C]onnectivity 약자

 

2) 자바 표준 인터페이스 - DBMS 연동 + 작업(CRUD)

 * CRUD? create read update delete..

 

3) Data Base 연동 기술


2. Java 응용 프로그램 + Oracle DBMS 연동

Java 응용 프로그램 > JDBC(표준 인터페이스) < Oracle DBMS 연동

 

1) 오라클사에서 JDBC를 구현한 드라이버(driver)가 Oracle Driver이며, 다운을 받아야 한다.

   (현재 Oracle 다운받을 때 Driver가 자동으로 받아져서 따로 다운할 필요 X)

 

2) ojdbc6.jar 파일이 Oracle Driver이다.


3. JDBC Driver? DBMS를 연결할 수 있는 드라이버

- MY SQL -> MY SQL사의 드라이버를 다운 받아야 함.

- MS SQL -> MS사의 드라이버를 다운 받아야 함.

- Oracle -> Oracle 사의 드라이버를 다운 받아야 함.


4. JDBC Driver의 종류

1) Type1 - ODBC Driver (제어판\시스템 및 보안\관리 도구에 있음)
       ㄴ 브릿지 사용 연동 / 편리하지만 성능이 떨어짐(중간에 전달받아서 하는 방식)
 2) Type2 - Native API Driver
       ㄴ C, C++등으로 만들어진 Library로 DB 연동
3) Type3 - 네트워크 프로토콜 Driver
       ㄴ 중간에 있는 미들웨어 서버에게 전달하면 DB 작업 처리
4) Type4 - Thin Driver (DBMS 프로토콜 Driver) *****
       ㄴ 순수 자바로 만들어졌으며, DBMS를 직접 호출(연결), 가장 많이 사용된다.


5. DBMS 연결(Connection)하는 순서 ***

1) Class.forName() 메서드로 드라이버(JDBC Driver) 로딩


2) DriverManager 클래스의 getConnection() 메서드를 사용해서 Connection 객체를 얻어온다.
    어떤 DB서버에 연결할지
    어떤 계정에 연결할지
    계정 비밀번호
    포트
    등등
    Connection conn = DriverManager.getConnection(서버,ID,PW);


3) 필요한(질의응답) 작업 - CRUD


4) 연결 종료 : Connection 객체 close() 


6. Connection 객체를 사용해서 DBMS(Oracle) 연결/닫기

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

- oracle.jdbc.driver : 패키지명

- OracleDriver : 클래스명

 

연결하기 전에 Oracle SQL Developer를 열고 SCOTT 계정 우클릭 후 속성을 확인

사용자이름, 비밀번호, 호스트이름, 포트, SID 값이 필요하다.

 

 

이클립스에서 JDBC를 연동하려고 시도해보니 아래와 같은 에러가 발생하였다.

java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver

 

원인은 드리이버를 인식하지 못해서였다.

해결방법은 다양한데 본인은 아래 두 개의 경로에 ojdbc6.jar 파일을 복사 붙여넣기를 하였다.

C:\Program Files\Java\jre1.8.0_321\lib\ext
C:\Program Files\Java\jdk1.8.0_321\jre\lib\ext

 

위의 방법 말고도 상단의 project에서 properties - Java Build Path에서 Add External JARs...를 누른뒤 ojdbc6.jar 파일을 추가해도 해결이 된다.

 

드라이버 파일을 추가한 뒤 연동을 해보면 잘 실행이된다!

[드라이버 로딩하는 코딩]

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

 

[DriverManager를 이용해서 Connection 객체 생성]

String url = "jdbc:oracle:thin:@localhost:1521:xe";

▶ "jdbc:DBMS이름:thin:@호스트이름:포트번호:SID"
String user = "SCOTT";
String password = "tiger"; 

Connection conn = DriverManager.getConnection(url, user, password);

 

<Connection의 속성값들>

- DatabaseName : 접속하려는 SQL 서버의 데이터베이스명

- User : 사용자의 이름

- Password : 사용자의 비밀번호

- PortNumber : TCP 포트번호. 기본값은 1443

- ServerName : 연결하려는 SQL 서버가 위치하고 있는 IP 주소

 

[Connection 닫는 코딩]

conn.close();

 

<결과>

System.out.println(conn); 코딩으로 콘솔창의 첫번째 값을 가져오고

System.out.println(conn.isClosed()); 코딩으로 Driver가 열렸는지 닫혔는지 Boolean 자료형으로 알려준다.


7. DB 연동 + 필요한 작업(CRUD)

[쿼리들을 실행하는 객체 3가지] -> Connection conn을 사용해서 생성한다.

1) Statement(스테이트먼트)의 의미

- 자바에서 사용되는 3가지 종류의 스테이트먼트들은 데이터베이스로 쿼리를 담아서 보내는 그릇 정도로 생각하면 된다.

- 즉, 스테이트먼트에 쿼리를 실어 데이터베이스로 보내버리면 데이터베이스에서 처리되는 것이다.

- 이 때 한번 사용하고 버리는 그릇은 Statement이며, 재사용 가능한 그릇은 PreparedStatement이다.

 

2) 종류 3가지

  (1) Statement - 기본 객체(하나의 쿼리를 사용하고나면 더이상 사용할 수 없음)
  (2) PreparedStatement - 바인딩 변수를 사용해서 쿼리 실행 객체(쿼리를 여러 번 처리 가능)
  (3) CallableStatement - 저장 프로시저를 호출해서 쿼리 실행 객체

 

[dept 테이블의 부서 정보를 조회]

▶ stmt.executeQuery(sql); -> SELECT(DQL 문) 사용할 때 사용

▶ stmt.executeUpdate(sql); -> INSERT, UPDATE, DELETE(DML 문) 사용할 때 사용

▶ rs.next() -> Resultset 안에 읽어오고자 하는 다음 레코드가 있는지 물어보는 함수로 true(있음)/false(없음) 돌려줌

 

주의! 쿼리문을 복사해서 가져올 경우 쿼리문의 ;은 지워야 한다.

String sql = "SELECT * FROM dept";

 

각 컬럼에 해당하는 자료형에 맞는 변수를 생성하여야 한다.

컬럼 순서대로 1,2,3 숫자를 줘도 가능하며, 컬럼명을 직접 입력하여도 가능하다.

int deptno = rs.getInt(1);
String dname = rs.getString("dname"); // 2를 줘도 되고, 컬럼명을 줘도 됨
String loc = rs.getString("loc");          // 3을 줘도 되고, 컬럼명을 줘도 됨

 

<String sql = "SELECT * FROM dept"; 결과>

 

<String sql = "SELECT * FROM dept WHERE deptno = 90"; 결과>

 

728x90
반응형

'TIL > JDBC' 카테고리의 다른 글

[SIST] JDBC_days05_Java에서 트랜잭션 처리와 CallableStatement  (0) 2022.05.10
[SIST] JDBC_days05_페이징 처리하기  (0) 2022.05.10
[SIST] JDBC_days04  (0) 2022.05.09
[SIST] JDBC_days03  (0) 2022.05.05
[SIST] JDBC_days02  (0) 2022.05.03
'TIL/JDBC' 카테고리의 다른 글
  • [SIST] JDBC_days05_페이징 처리하기
  • [SIST] JDBC_days04
  • [SIST] JDBC_days03
  • [SIST] JDBC_days02
야리니
야리니
오늘보다 내일 더 성장하는 개발자가 되기 위한 야리니 블로그입니다 :)
    반응형
    250x250
  • 야리니
    야리니의 step by step
    야리니
  • 링크

    • GitHub
    • Linkedin
  • 전체
    오늘
    어제
    • 분류 전체보기 (477)
      • TIL (379)
        • Java (97)
        • Kotlin (28)
        • JPA (16)
        • Spring (37)
        • Oracle (22)
        • JDBC (7)
        • Web(HTML, CSS, JS, jQuery) (90)
        • View Template (31)
        • AWS (7)
        • HTTP (7)
        • CS (5)
        • Linux, Unix (2)
        • Python (20)
      • Trouble Shooting(Error) (37)
      • Algorithm (15)
      • Git,GitHub (8)
      • Diary (23)
      • 독서 (9)
      • Etc (6)
        • Mac (1)
        • 학원준비과정 (2)
  • 블로그 메뉴

    • 방명록
    • 태그
  • 공지사항

    • 안녕하세요 :)
  • 인기 글

  • 태그

    국비지원학원
    코틀린
    java기초
    CSS
    백엔드 개발자
    java
    쌍용교육센터
    HTML
    oracle
    Kotlin
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
야리니
[SIST] JDBC_days01
상단으로

티스토리툴바