23.01.19

이동욱·2023년 8월 6일
0

NaverCloudCamp

목록 보기
15/42

학습 내용

  1. JDBC
  2. JDBC 절차
  3. executeQuery, executeUpdate
  4. statement prepare

JDBC

Java에서 DB와 데이터를 주고받는 방식을 표준화한 API이다. 각 DB에 맞는 JDBC Driver를 가지고 있으며 해당 Driver는 java.sql의 구현체들이다. 따라서 java.sql의 사용법만 알고 있다면 모든 DB의 Driver를 사용할 수 있기에 DB에 독립적인 개발이 가능하다. 참고로 Driver들도 java class이기에 Driver의 classPath를 설정해줘야한다.

JDBC 절차

CLI에서 DB를 사용하는 절차
로그인 => 쿼리작성 => 결과반환

JDBC도 위 절차들을 추상화, 캡술화하여 제공한다
connection => statement => resultSet

executeQuery, executeUpdate

  • ResultSet executeQuery(String query)
    select 쿼리를 보낼때 사용하며 CLI에서 쿼리를 보내면 해당 쿼리에 대한 결과가 출력되것처럼 결과를 ResultSet에 담아서 반환한다.

  • int executeUpdate(String ddl)
    update, insert, delete등의 dml create, alter등의 ddl 쿼리를 보낼때 사용하며 해당 쿼리가 반영된 레코드들의 갯수를 반환한다.

perpared statement, statment

  • statment
no, id, pwd를 입력받아 DB에 insert하는 과정

stmt = con.createStatement(); //JDBC Driver를 통해 stmt 생성
String query = "insert into number1 values('" + no + "','" +id + "', '"+pwd+"')"; //직접 쿼리를 작성
stmt.executeUpdate(query); // DB에 쿼리 전달

Statment는 위 과정을 통해 DB에 쿼리를 전달한다

  • perpared statement
PreparedStatement pstmt = con.prepareStatement("insert into number1 values(?,?,?)");

pstmt.setInt(1, 1);
pstmt.setString(2, "id");
pstmt.setString(3, "pwd");

pstmt.executeUpdate();

DB가 쿼리를 처리하는 방식은 아래와 같다.
1. parsing
쿼리를 parsing하여 문법에 대한 오류를 찾는다.

  1. optimizer
    여러 수행 경로를 비교하여 가장 효율적인 실행 방식을 찾는다.

  2. compile
    DB가 인식할수있는 byte code로 변환한다

  3. excute
    byte code를 읽고 실행한다.

statment는 위 과정을 모두 거치는 반면 prepareStatement는 인스턴스 생성과 동시에 특정값만 제외한 쿼리를 db에 전송하여 위 과정중 parsing의 과정을 생략한다.
또한 쿼리문 안에 직접 파라미터를 입력하는 statement와는 달리 setInt(), setString()등을 제공하여 보다 편하게 쿼리를 작성 가능하게 해준다.

Question

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

A. Class.forName()은 객체를 생성하는것이 아닌 ClassLoader를 통해 해당 클래스를 JVM에 탑재 시키는 역할을 한다. new() 키워드를 통해 인스턴스화 하지 않더라고 JVM에는 OracleDriver의 기능이 로드되어있기때문에 OracleDriver 기능을 사용 할 수 있다.

Q2. Path, ClassPath 차이

A. Path는 os에게 특정 app의 위치를 알려주는 역할을 수행하며, ClassPath는 jdk에게 class들에 대한 위치정보를 알려주는 역할을 수행한다.

Q3. jar, war

A. jar는 class파일의 모아둔것이며 war는 class파일 이외에 ServletContainer에 탑재하여 사용할수 있도록 jsp, servlet, html등 웹 관련 파일들을 모아둔것이다.

Q4. innerclass, anonymouse class

A. class안의 class가 존재하는 innerClass, method 내부에 class가 존재하는 innerMemberClass, class 생성과 동시에 사용 가능한 anonymouse class가 존재한다

Q5. throw

A. java에 Exception은 Runtime Exception과 이를 제외한 나머지 Exception들이 존재한다.
Runtime Exception은 실행중 개발자의 코드상 오류로 인해 발생할 수 있는 Exception들이며 따로 throws나 try-catch를 통해 처리해주지 않아도 되며 unchecked exception이라 한다. 나머지 Exception들은 명시적으로 throw나 try-catch로 예외를 처리해주어야 하며 checked exception이라 한다.

Q6. Java properties class

A. 프로그램 관련 설정 정보들은 properties라는 파일안에 관리한다. java의 properties class는 이러한 설정 정보들을 저장하거나 조회할때 사용한다.

profile
Backend Developer

1개의 댓글

comment-user-thumbnail
2023년 8월 6일

이런 유용한 정보를 나눠주셔서 감사합니다.

답글 달기