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