✍ JDBC(Java DataBase Connectivity)
: Java에서 DB에 접근할 수 있게 해주는 JavaProgrammingAPI
- Java에서 DB와 연결하기 위한 인터페이스, 클래스를 제공 (java.sql 패키지)
- 프로그래밍 언어에서 제공하는 기능을 사용할 수 있도록 하는것
API
Application Programming Inreface
: 프로그래밍 언어 또는 프로그램에서 제공하는 기능을 사용할 수 있도록 하는것
JDBC Driver는 Library로 그 안에 있는 코드들을 다 쓸 수있다.
jar 자바 아카이브러리 : 자바 기본형식
🚩 ojdbc6.jar (Oracle JDBC 드라이버 드라이버 포함되어있음)
: Oracle에서 제공하는 Java와 Oracle DBMS 연결을 위한 라이브러리(클래스, 코드)
-> 프로젝트에 등록하는 작업 필수!!!!
🚩JDBC
package edu.kh.jdbc.run;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBCBasic {
public static void main(String[] args) {
// 1. JDBC 객체 참조 변수 선언
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 2. 2-1) 2-2)
conn = DriverManager.getConnection(
"jdbc:oracle:thin:@127.0.0.1:1521:xe", "kh", "kh");
// -- 중간확인
// 커넥션이 정상적으로 생성되었는지 확인,
// -> 오류가 발생하지 않으면 db연결이 성공된 것!
System.out.println(conn); //결과: oracle.jdbc.driver.T4CConnection@258e2e41
// 3.
String sql = "SELECT EMP_NAME, SALARY, DEPT_CODE FROM EMPLOYEE" ;
// 4.
stmt = conn.createStatement();
// 5.
rs = stmt.executeQuery(sql); //executeQuery : 질의를 수행
// 6.
while( rs.next() ) {
// 7.
String empName = rs.getString("EMP_NAME");
int salary = rs.getInt("SALARY");
String deptCode = rs.getString("DEPT_CODE");
System.out.printf("이름 : %s / 급여 : %d / 부서코드 : %s \n",
empName, salary, deptCode );
}
}catch(Exception e) {
e.printStackTrace();
}finally { //예외가 발생 하든 말든 사용한 자원을 반환
// 8. 8-1) 8-2)
try {
if (rs != null) { rs.close(); }
if (stmt != null) { rs.close(); }
if (conn != null) { rs.close(); }
}catch(SQLException e) {
e.printStackTrace();
}
}
}
}
1. JDBC 객체 참조 변수 선언
Connection conn = null;
🔎 Connection
: DB의 연결 정보를 담은 객체
특정 데이터 원본과 연결된 커넥션을 나타내며 Statement객체를 생성할 때도
Connection객체를 사용하여 createStatement() 메소드를 호출하여 생성
SQL문장을 실행시키기 전에 우선 Connection객체가 있어야 함
- 연결정보 : 아이디(id), 비밀번호(password), 주소(ip), 접속방식, DB 이름
--> Java 프로그램과 DB 사이를 연결해주는 통로(길)의 역할을 한다.
Statement stmt = null;
🔎 Statement
: Connection 객체를 통해 DB에 SQL문을 전달하여 실행시키고 결과를 반환 받는 역할을 하는 객체
Connection객체에 의해 프로그램에 리턴되는 객체에 의해 구현되는 일종의 메소드 집합 정의
Connection클래스의 createStatement() 메소드를 호출하여 얻어지며
생성된 Statement객체로 질의문장을 String객체에 담아 인자로 전달하여
executeQuery() 메소드를 호출하여 SQL질의 수행
ResultSet rs = null;
🔎 ResultSet
: SELECT문 질의 성공 시 반환되는 결과를 저장하는 객체
SELECT문을 사용한 질의 성공 시 Result Set 반환 SQL질의에 의해 생성된 테이블을 담고 있으며
커서(cursor)로 특정 행에 대한 참조 조작
2. Connection 객체 얻어오기
2-1) Oracle JDBC Driver 메모리에 로드하기
Class.forName("oracle.jdbc.driver.OracleDriver");
➡ 요즘에는 작성 안해도 자동으로 로드 되지만 명시적으로 써둠
2-2) DriverManager 객체를 이용하여 Connection 객체 얻어오기
conn = DriverManager.getConnection( "jdbc:oracle:thin:@127.0.0.1:1521:xe", "kh", "kh");
🔎DriverManager
: 로드된 JDBC 드라이버를 이용하여 Connection을 만드는 객체
데이터 원본에 JDBC드라이버를 통하여 커넥션을 만드는 역할
Class.forName() 메소드를 통해 생성되며 반드시 예외처리를 해야 함
직접 객체 생성이 불가능하고 getConnection() 메소드를 사용하여 객체 생성 가능
✔ jdbc:oracle:thin : JDBC 드라이버 타입이 thin 타입임을 의미
✔ @127.0.0.1 (루프백 아이피) : 내 컴퓨터 주소
✔ :1521 : 포트 번호 -> 1521번 포트가 Oracle DBMS 설치 시 기본 포트
(포트: 프로그램이 외부와 통신하기 위해 열려있는 부분의 주소)
✔ xe : Express의 약자, DB 이름
3. DB에 전달할 SQL 구문을 작성
String sql = "SELECT EMP_NAME, SALARY, DEPT_CODE FROM EMPLOYEE" ;
주의 ❗ ❗
JAVA에서 SQL작성 시 ;(세미콜론) 포함 금지
4. SQL을 전달하여 수행하고, 결과를 반환 받을 객체 Statement를 생성
stmt = conn.createStatement();
5. Statement 객체에 SQL을 담아 DB에서 수행하고
결과(Result Set)을 받아와 ResultSet rs 변수에 저장
rs = stmt.executeQuery(sql);
🔎 executeQuery
: 질의 수행
🔎 executeQuery(sql)
: select문을 수행하고 resultSet을 반환하는 메서드
➡ sql 질의 수행한 결과를 rs에 저장
여기서 sql은 3번에 DB에 전달할 SQL 구문
6. 조회 결과 있을 경우 커서를 이용해 행을 순서대로 접근
while( rs.next() ) { ....
🔎 rs.next()
: 커서를 이용해 행을 순서대로 접근
7. rs.get[Type]("컬럼명") 메서드를 이용해 컬럼 값 가져오기
String empName = rs.getString("EMP_NAME");
int salary = rs.getInt("SALARY"); // 급여는 정수
String deptCode = rs.getString("DEPT_CODE");
System.out.printf("이름 : %s / 급여 : %d / 부서코드 : %s \n", empName, salary, deptCode );
} //while end
🔎 [Type]
: 컬럼 값의 Java 버전 자료형
8. 사용한 JDBC 객체 자원 반환 (반환하지 않으면 계속 메모리를 사용한다.)
8-1) 사용한 객체의 역순으로 close()를 수행한다.
- 사용 객체 순서 : 1. Connection -> 2.Statement -> 3.Result
- 사용 객체 역순 : 1.Result -> 2.Statement -> 3. Connection
8-2.) close () 전 null 여부 검사 수행
}finally { //예외가 발생 하든 말든 사용한 자원을 반환
try {
if (rs != null) { rs.close(); }
if (stmt != null) { rs.close(); }
if (conn != null) { rs.close(); }
}catch(SQLException e) {
e.printStackTrace();
}
}
'Backend > Java' 카테고리의 다른 글
[Java] 입출력 IO (0) | 2021.10.07 |
---|---|
[Java] Collection_Map (0) | 2021.10.06 |
[Java] Collection_Set (0) | 2021.10.06 |
[Java] Collection_ List (0) | 2021.10.06 |
[Java] Scanner 주의사항/ .next()와 .nextline() 차이 (0) | 2021.09.16 |