상세 컨텐츠

본문 제목

6월 28일_SQL(VIEW, JAVA에서 SQL불러오기)

CLASS_SQL

by awesong 2024. 6. 28. 17:53

본문

728x90

# VIEW(가상테이블)

  • 하나 이상의 테이블이나 다른 뷰로부터 유도된 결과 집합
  • VIEW는 데이터베이스 객체로써 저장된 쿼리를 실행하여 결과를 동적으로 생성
  • 데이터를 간편하게 조회하고, 복잡한 쿼리를 단순화하며, 보안성을 강화
목적 기존 테이블이나 다른 뷰에서 데이터를 선택적으로 조회하거나 계산된 데이터를 제공하기 위해 사용됨.
데이터 보존성 VIEW는 실제 데이터를 저장하지 않고, 쿼리를 실행하여 데이터를 동적으로 생성함.
업데이트 가능 여부 일반적으로 VIEW는 기본 테이블이나 다른 VIEW의 데이터를 조회만 할 수 있으며,
직접적으로 업데이트가 제한될 수 있음.
사용자 정의 가능 사용자는 자신의 필요에 맞게 VIEW를 정의하고,
필요에 따라 다양한 조인, 필터링, 계산을 포함할 수 있음.
보안성 VIEW를 사용하여 사용자가 직접 테이블에 접근하는 것을 제한하고,
데이터에 대한 접근 제어를 강화할 수 있음.
조회 성능 VIEW는 미리 정의된 쿼리를 실행하여 결과를 반환하기 때문에,
복잡한 쿼리를 단순화하고 성능을 최적화할 수 있음.

 

> 여러개의 테이블을 JOIN해서 가져올 때 매번 JOIN하기는 번거로우니 가상으로 VIEW를 만들어 하나의 테이블로 관리

 

-- VIEW 생성 : 여러 테이블을 JOIN해서 하나의 테이블로 생성
CREATE VIEW V_STUDENT_CLASS AS
SELECT
    M.C_NO, M.C_NAME, M.PHONE, M.ADDRESS, M.GRADE,
    C.REGIST_MONTH, C.CLASS_AREA, C.TUITION,
    T.TEACHER_NAME
FROM TBL_CLASS_202201 C
JOIN TBL_TEACHER_202201 T ON C.TEACHER_CODE = T.TEACHER_CODE
JOIN TBL_MEMBER_202201 M ON M.C_NO = C.C_NO;

SELECT * FROM V_STUDENT_CLASS;

-- VIEW 삭제
DROP VIEW V_STUDENT_CLASS;

 

다중 테이블이 하나의 VIEW테이블로 묶여서 출력됨

 


# JAVA에서 SQL 불러오기

 

package javaToOracle0628;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
	
	
	public class OracleDBExample {

	    public static void main(String[] args) {
	   // 	Class.forName("oracle.jdbc.driver.OracleDriver");
	        String username = "HR";  // 오라클 사용자 이름
	        String password = "1234";  // 오라클 비밀번호
	        String url = "jdbc:oracle:thin:@localhost:1521:xe";  // JDBC URL

	     // Connection, PreparedStatement, ResultSet 객체 선언
	        Connection conn = null;
	        PreparedStatement pstmt = null;
	        ResultSet rs = null;

	        try {
	            // 데이터베이스 연결
	            conn = DriverManager.getConnection(url, username, password);

	            // SQL 쿼리 준비
	            String sql = "SELECT MEM_ID,MEM_NAME,DEBUT_DATE FROM members";
	            pstmt = conn.prepareStatement(sql);

	            // 쿼리 실행
	            rs = pstmt.executeQuery();

	            // 결과를 출력
	            System.out.println("");
	            System.out.println("");
	            System.out.println("----------------------------------------");
	            System.out.println("멤버ID         멤버이름             대뷔연도");
	            System.out.println("----------------------------------------");
	            	            
	            while (rs.next()) {
	                // 데이터 타입에 맞는 메서드 사용
	            	// 문자열로 가져오기, NUMBER은 int - getInt 사용
	                String memIdStr = rs.getString("MEM_ID");
	            	String memName = rs.getString("MEM_NAME");
	            	//SQL에서 DATA_TYPE이 DATE인 경우에만 사용가능
	                java.sql.Date debutDate = rs.getDate("DEBUT_DATE");
               
	                 System.out.printf("%-10s %-15s %-10s%n", memIdStr, memName, debutDate);
	            }
	        } catch (SQLException e) {
	            e.printStackTrace();
	        } finally {
	            // 리소스 해제
	        	try {
	                rs.close();
	                pstmt.close();
	                conn.close();
	            } catch (SQLException e) {
	                e.printStackTrace();
	            }
	        }
	    }
	}

관련글 더보기