자바 웹 개발/웹 데이터베이스

[Web] 데이터베이스 연동

ycraah 2024. 8. 19. 23:56

오라클 데이터베이스 연동

오라클 데이터베이스와 연동하기 위해서는 드라이버가 필요하다. 다음 경로에 설치한다. 

 

클래스 생성

VO는 데이터를 담은 객체이다. 데이터베이스와 직접 상호작용을 합니다. 

DAO는 데이터베이스와 직접 상호작용하는 객체이다. 아래는 DAO의 특성이다. 

  • 데이터베이스 연결 및 해제
  • 데이터 CRUD(Create, Read, Update, Delete) 작업 수행
  • SQL 쿼리 실행 및 결과 반환

 

 

VO 예시)

데이터에서 조회한 레코드의 컬럼 값을 속성에 저장해야하니 컬럼 이름과 동일한 자료형과 이름으로 소성을 선언하고 겟터, 셋터를 생성한다.

public class MemberVO {
	private String id;
	private String pwd;
	private String name;
	private String email;
	private Date joinDate;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public Date getJoinDate() {
		return joinDate;
	}
	public void setJoinDate(Date joinDate) {
		this.joinDate = joinDate;
	}
	
}

 

DAO 예시)

public class MemberDAO {
	  private PreparedStatement pstmt;
	  private Connection con;
	  private DataSource dataFactory;
	  
	  public MemberDAO() {
		try {
			Context ctx = new InitialContext();
			Context envContext = (Context) ctx.lookup("java:/comp/env");
			dataFactory = (DataSource) envContext.lookup("jdbc/oracle");			
		} catch (Exception e) {
			e.printStackTrace();
		}	
	}
	
	  public boolean isExisted(MemberVO memberVO) {
		boolean result = false;
		String id = memberVO.getId();
		String pwd = memberVO.getPwd();
		try {
			con = dataFactory.getConnection(); //DECODE(A, B, X, Y) A = B 이면 X를 출력, A ≠ B 이면 Y를 출력
			String query = "SELECT DECODE(COUNT(*),1,'true','false') AS RESULT FROM T_MEMBER"; //오라클 decode()함수를 이용하여 ID와 비밀번호가 테이블에 존재하는지에 따라 true/false 조회
			query += " where id=? and pwd=?";
			pstmt = con.prepareStatement(query); //SQL문을 작성한 후 데이타베이스에 조회
			pstmt.setString(1, id);
			pstmt.setString(2, pwd);
			System.out.print("pstmt : " + query + id + pwd);
			
			ResultSet rs = pstmt.executeQuery();
			rs.next(); //커서를 첫 번째 레코드로 위치
			result = Boolean.parseBoolean(rs.getString("result")); //해당 순서 열에 있는 데이터를 String으로 받아옴
		} catch(Exception e) {
			e.printStackTrace();
		}
		return result;
	}
	
}