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(“등록” + )