JDBC
java가 DB와 연결할 수 있게 해주는 java API
전체 코드
public class JDBCExample {
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
String type = "jdbc:oracle:thin:@";
String ip = "127.0.0.7";
String port = ":1521";
String sid = ":xe";
String user = "***";
String pw = "********";
conn = DriverManager.getConnection(type + ip + port + sid, user, pw);
System.out.println(conn);
String sql = "SELECT EMP_ID, EMP_NAME, SALARY, DEPT_CODE FROM EMPLOYEE ORDER BY EMP_NAME ASC";
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
int sum = 0;
while(rs.next()) {
int empId = rs.getInt("EMP_ID");
String empName = rs.getString("EMP_NAME");
int salary = rs.getInt("SALARY");
String deptCode = rs.getString("DEPT_CODE");
System.out.printf("사번 : %d 이름 : %s 급여 : %7d 부서코드 : %s\n",
empId, empName, salary, deptCode);
sum += salary;
}
System.out.println("급여 합계 : " + sum);
}catch(SQLException e) {
e.printStackTrace();
}catch(ClassNotFoundException e) {
System.out.println("OJDBC 라이브러리 미등록 또는 경로 오타");
e.printStackTrace();
}finally {
try {
if(rs != null) rs.close();
if(stmt != null) stmt.close();
if(conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
1단계
1단계 : DBC 객체 참조 변수 선언 (java.sql 패키지)
Connection
DB 연결 정보를 담은 객체
자바와 DB 사이를 연결 해주는 일종의 통로(Stream과 비슷)
Connection conn = null;
Statement
Connection 객체를 통해 Java에서 작성된 SQL을 DB로 전달하여 수행한 후 결과를 반환받아 다시 Java로 돌아오는 역할의 객체
Statement stmt = null;
ResultSet
SELECT질의 성공 시 반환되는 결과 행의 집합(Result Set)을 참조하는 변수
ResultSet rs = null;
2단계
2단계 : 참조변수에 알맞은 객체 대입하기
2-1 Oracle JDBC Driver 메모리 로드
Oracle JDBC Driver는 DB연결에 필요하다
Oracle JBDC Driver가 어디에 있는지만 알려주면 알아서 메모리 로드 (생략도 가능함)
Class.forName("oracle.jdbc.driver.OracleDriver");
ClassNotFoundException 발생 가능성이 있어 예외처리를 해준다.
2-2 연결 정보를 담은 Connection을 생성
이때 DriverManager 객체가 필요하다
DriverManager : JDBC 드라이버를 통해 Connection 객체를 만드는 역할
String type = "jdbc:oracle:thin:@"; // JDBC드라이버가 thin타입
String ip = "127.0.0.7"; // DB 서버 컴퓨터 IP
String port = ":1521";
String sid = ":xe"; // DB 이름
// Oracle DB Express Edition
String user = "lcs"; // 사용자명
String pw = "lcs1234"; // 비밀번호
conn = DriverManager.getConnection(type + ip + port + sid, user, pw);
// jdbc:reavle:thin:@115.90.212.22:20000:xe
// oracle.jdbc.driver.T4CConnection@6913c1fb
// connection = 통로, 접속 방법
// 중간 확인
System.out.println(conn);
2-3 Statement객체에 적재할 SQL 작성하기
☆ JAVA에서 작성된 SQL문은 마지막에 ;(세미콜론)을 찍지 않아야 한다
("~~;" 하지 말라는 의미)
"유효하지 않은 문자" 오류를 발생시킬 수 있어서 예외처리를 해야한다.
String sql = "SELECT EMP_ID, EMP_NAME, SALARY, DEPT_CODE FROM EMPLOYEE";
구문의 뒤쪽에 ORDER BY EMP_NAME ASC를 추가해 정렬할 수 있다.
2-4 Statement 객체 생성
stmt = conn.createStatement();
2-5 결과를 반환받아 rs 변수에 대입
SQL을 Statement에 적재 후 DB로 전달하여 수행한 후 결과를 반환 받아와 rs변수에 대입한다
rs= stmt.executeQuery(sql);
DB 또한 객체이다. ResultSet(객체)의 주소를 가져온다.
DB에서 SELECT 수행한 결과(ResultSet) 객체를 얻어와 rs가 이를 참조하게 한다.
3단계
3단계 : SELECT 수행 결과를 한 행(Single row) 씩 접근하여 원하는 컬럼 값 얻어오기
while(rs.next()) {
// rs.next() : 참조하고 있는 ResultSet 객체의
// 첫 번째 칼럼부터 순서대로 한 행씩 이동하며
// 다음행이 있을 경우 True를 반환한다.
// rs.get[Type]("컬럼명") : 현재 가리키고 있는 행의 특정 컬럼 값을 얻어옴
// [Type]은 DB에서 얻어와서 Java에 저장할 자료형(Java쪽 자료형)
int empId = rs.getInt("EMP_ID");
String empName = rs.getString("EMP_NAME");
int salary = rs.getInt("SALARY");
String deptCode = rs.getString("DEPT_CODE");
// 조회 결과 출력
System.out.printf("사번 : %d 이름 : %s 급여 : %7d 부서코드 : %s\n",
empId, empName, salary, deptCode);
}
4단계
예외처리 및 JDBC 반환
}catch(SQLException e) {
//SQLException : DB 연결 관련 예외의 최상위 부모
e.printStackTrace();
}catch(ClassNotFoundException e) {
System.out.println("OJDBC 라이브러리 미등록 또는 경로 오타");
e.printStackTrace();
}finally {
// [4단계] 사용한 JDBC 객체 자원 반환(close)
// -> 자원 반환 순서는 객체 생성순서의 "역순"
// 생성 순서 : Connection, Statement, ResultSet
// 반환 순서 : ResultSet, Statement, Connection
try {
// NullPointerException 방지를 위한 if문 추가
if(rs != null) rs.close();
if(stmt != null) stmt.close();
if(conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
'Programming language > SQL' 카테고리의 다른 글
SQL - 09 서브쿼리 1 (0) | 2022.04.09 |
---|---|
SQL - 08 TCL (0) | 2022.04.09 |
SQL - 06 DML (0) | 2022.04.09 |
SQL - 05 JOIN (0) | 2022.04.09 |
SQL - 04 GROUP BY & SET OPERATION (0) | 2022.04.09 |