/ LECTURE

JDBC - Intro / DAO

이 페이지는 다음에 대한 공부 기록입니다

JAVA(자바), Python(파이썬) 기반의

AI 활용 응용 소프트웨어 개발자 양성 과정

2021.11.10. ~ 2022.05.18.

찾으시는 정보가 있으시다면
주제별reference를 이용하시거나
우측 상단에 있는 검색기능을 이용해주세요

50~51일차 수업

JAVA 에서 DB 접근하기

Import java.sql.*;

public class SelectEmp{
    public void main(String[] args){
        String url = jdbc:oracle:thin:@localhost:1521:orcl;
        // “자바로:오라클 db타입의 db를 :thin driver을 통해서:localhost서버에:1521포트로:오라클db에 접속” 란 의미, 오라클은 thin 외에도 3개의 타입을 지원한다

		String id = admin;
		String pw = 123456;
		
		Connection conn = null;
		PreparedStatement ps = null;
		Statement st = null;
        ResultSet rs = null;

		try{
			conn = DriverManager.getConnection(url,id,pw);
		}catch (Exception e){	}
		
		String job = PRESIDENT;
		
		try{
			// Statement를 사용해서 sql문 실행하기
			String sql = SELECT * FROM emp WHERE job = “’ + job + ’”;
			// 변수를 sql문에 바로 대입, 공백 주의, injection 위험이 있음			
			st = conn.createStatement();
			rs = st.executeQuery(sql);

			// PreparedStatement를 사용해서 sql문 실행하기
			String sql = SELECT * FROM emp WHERE job = ?;
			ps = conn.prepareStatement(sql);
			ps.setString(n,job);	// n번째 물음표에 변수를 대입
			rs = ps.executeQuery();
		
			while(rs.next()){
				System.out.print(rs.getInt(empno) + “\t);
				System.out.print(rs.getString(ename) + “\t);
				System.out.println();
			}
		}catch(SQLException e){  }
	}
}

DAO

DB와의 연결은 프로젝트 내 어디서든지 가능

그러다 보니 드라이버 로딩 또는 한번만 실행해야하는 코드를 반복적으로 사용해 시스템에 부담이 되는 문제가 생길 수 있음

이를 방지하고자 DB를 사용,조회,조작하는 기능을 담당하는 오브젝트를 설계함

싱글톤 패턴

응용 프로그램을 만들 때 최초의 한번만 메모리에 할당하고 그 이후에는 메모리에 있는 값들로만 할당하는 방식

인스턴스가 한 개인 것을 보증하는 디자인 패턴

장점

  • 동일한 인스턴스를 사용하기 때문에 메모리 낭비를 막을 수 있다

  • 전역 변수화를 통해 데이터를 공유하기가 쉽다

  • 데이터 재접속 시 로딩 속도가 현저하게 줄어든다

단점

  • 객체가 하나이기 때문에 공유가 기본사항, 때문에 다른 클래스와의 결합도가 높아져 수정 또는 테스트가 어려워짐, 객체 지향 설계 원칙에 벗어난다

  • 멀티쓰레드에서 동기화를 하지 않으면 오류가 발생한다

public class EmpDAO{
    // 프로그램 실행 중에 db 접속 관련해서 변하지 않는 값들을  final 까지 선언, 예방
    private static final String dbDriver = oracle.jdbc.OracleDriver;
    private static final String url = jdbc:oracle:thin:@localhost:1521:orcl;
    private static final String id = admin;
    private static final String pw = 123456;

    private Connection conn;

    private static EmpDAO instance;
    // EmpDAO 타입의 변수 instance 생성
    
    public static EmpDAO getInstance() throws Exception {
        // instance가 없을 때만 생성하면서, 1개의 객체임을 보증
        if (instance == null){
            instance = new EmpDAO();
        }
        return instance;
    }
    
    // driver 로딩을 생성자에 넣어서 한번만 실행되도록 유도
    private EmpDAO() throws Exception {
        Class.forName(dbDriver);
    }
}

public void insert (int empno, int sal) throws Exception {
System.out.println(등록 + )