본문 바로가기
Programming/Jsp

[JSP/DB] JDBC 데이터베이스 연동 - Oracle SQL

by prinha 2020. 7. 8.
반응형

 

 

 

1. JDBC (Java Database Connectivity)

 - JDBC는 자바 프로그램과 관계형 데이터 원본에 대한 인터페이스로

   JDBC Library는 관계형 데이터베이스에 접근하고, SQL 쿼리문 실행 방법을 제공한다.

 

 - JDBC 라이브러리는 'java.sql' 패키지에 의해 구현되고, 이 패키지는 여러 종류의 데이터 베이스에 접근 가능 하다.

   ( 'java.jql' 패키지는 단일 API를 제공하는 클래스와 인터페이스의 집합)

 

 - JDBC 드라이버는 JDBC_-ODBC브리지 + ODBC 드라이버 (JDBC-ODBC Bridge Plus ODBC Drive),

   네이티브-API 부분적인 자바 드라이브(Native-API Partly-Java Driver),

   JDBC-Net 순수 자바 드라이버(JDBC-Net Pure Java Driver),

   네티이브-프로토콜 순수 자바 드라이버(Native-Protocol Pure Java Driver) 등의 4가지 타입의 JDBC 드라이버를 제공한다.

 

2. JDBC 프로그램의 작성 단계

 

1) JDBC 라이브러리 Import 

  <%@ page import="java.sql.*"%>

 

 

2) JDBC 프로그램 수행의 4단계

▶1단계 : JDBC 드라이버 Load   인터페이스 드라이버를 구현하는 작업으로, Class 클래스의 forName() 메소드를 사용하여 드라이버를 로드한다.   forName(String className) 메소드는 주어진 클래스나 인터페이스 이름을 객체로 리턴한다.

   드라이버들이 읽히기만 하면 자동 객체 생성, DriverManager에 등록된다. 

   드라이버 로딩은 프로그램 수행시 단 한번만 필요

   

   -> Oracle 드라이버 로딩(=클래스 객체 생성)   // ojdbc6.jar

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

 

▶2단계 : Connection 객체 생성 -> 해당 데이터베이스에 접속

   드라이버 매니저에 등록된 각 드라이버들을 getConnection(String url) 메소드를 사용하여 식별한다.

   이때 url식별자와 같은 것을 찾아서 mapping하며 찾지 못하면 'no suitable error'가 발생한다.

   throws SQLException --> 반드시 예외 처리를 해야하는 메소드이다.

 

   -> Oracle Connection 객체 생성 

   String jdbcUrl = "jdbc:oracle:thin:@localhost:1521:orcl";  // 1)오라클 데이터베이스를 접속하기 위한 URL
   String dbId = "ora_user";  // 오라클 접속 계정 ID/PW 
   String dbPass = "1234";

   Connection conn = DriverManager.getConnection(jdbcUrl, dbId, dbPass);

 

▶3단계 : 쿼리 실행 객체 생성 -> 'Statement/PreparedStatement/CallableStatement' interface

   sql 쿼리를 생성하고 실행하며, 반환된 sql문을 DBMS에 보내는 데에 사용된다.

   3가지 종류의 statement들은 데이터베이스로 쿼리를 담아서 보내는 그릇으로 생각하면 된다.

   한번 사용하고 버리는 그릇 = Statement / 재사용 가능 그릇 = PreparedStatement

 

  Statement stmt = conn.createStatement();

 

  * Statement : 정적쿼리에 유리/객체를 생성하면 executeQuery() 메소드를 호출하여 sql 질의 실행/단순 질의문에 좋다

  * PreparedStatement : 동적쿼리/질의문을 미리 컴파일해놓고 값을 지정하는 방식->속도빠름/재사용에 유리/

  * CallableStatement  : 데이터베이스 내의 스토어드 프로시저(Stored Procedure)를 호출할수있는 스테이트먼트

    (스토어드 프로시저 : 해당 데이터베이스 SQL문을 저장한 것)

 

▶4단계 : statement 객체의 쿼리 수행 -> executeUpdate() / executeQuery()

 

- stmt.executeQuery() : recordSet 반환 => Select 문에서 사용

  ResultSet rs = stmt.executeQuery("select * from 소속기관");

 

- stmt.executeUpdate() : 성공한 row 수 반환 => Insert문, Update문, Delete문에서 사용

  String sql = "update member1 set passwd = '3579' where id ='abc'";

  stmt.executeUpdate(sql);



3) ResultSet객체에서 데이터 추출 / 단, select문을 사용할때만

한 행씩 이동하면서 원하는 필드 값을 추출하는 과정 -> 다음 행으로 이동시 next() 메소드 사용

 ex) while(rs.next()) { int bIdx = rs.getInt("bIdx"); String bWriter = rs.getString("bWriter");}

 

 

4) 생성된 객체들의 역순으로 메모리 close() 작업

 ex) Connection객체.close();

 


 

--> 매번 새로운 데이터베이스 연결에 대한 요청이 들어올 때마다 수행하는 것은 시스템에 과부화를 줌

--> 커넥션 풀을 이용해 이러한 단점을 개선함

 

반응형