티스토리 뷰

반응형
Oracle DB와 이클립스를 연동하여 로그인 클래스를 생성해보자.


우선 위와 같이 Build path를 이용하여 오라클 DB와 연동해주고 라이브러리에 하위 클래스를 생성한다.

그리고 SQL을 이용하여 기본적인 테이블 및 스키마를 설정한다.


DAO class

/**
 * DAO ( Data Access Object) : Java Beans : CRUD(DML) methods
 * 
 */
package com.kysoft.member;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 * @author KYU
 */
public interface DAO {

		static final String oracleDriver="oracle.jdbc.OracleDriver"; //oracle.jdbc.driver.OracleDriver
		static final String oracleURL="jdbc:oracle:thin:@localhost:1521:xe";
		static final String oracleId="java";
		static final String oraclePw="1234";
		
		// JDBC 연결 메소드(method)
		public Connection getConnection() throws ClassNotFoundException, Exception;
		// 인원현황을 얻어오는 메소드 : select * from member2
		public ArrayList<Member> getMembers() throws SQLException, Exception;
}

Member class 
package com.kysoft.member;

/**
 * @author KYU
 */
public class Member { // DB table(member2)의 일치
	
	private String id; // id field (varchar2(20) : PK)
	private String pw; // pw field (varchar2(20))
	
	public String getId() {
		return id;
	}
	public String getPw() {
		return pw;
	}
	public void setId(String id) {
		this.id = id;
	}
	public void setPw(String pw) {
		this.pw = pw;
	}
}


MemberDAO class
package com.kysoft.member;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ArrayList;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

/**
 * @author KYU
 */
public class MemberDAO implements DAO {

	/* (non-Javadoc)
	 * @see com.kysoft.member.DAO#getConnection()
	 */
	@Override
	public Connection getConnection() throws ClassNotFoundException, Exception {
		
		Connection con = null; // JDBC와의 연결 객체 초기화
		
		try{
		Class.forName(oracleDriver); // JDBC Driver 검색
		con = DriverManager.getConnection(oracleURL,oracleId,oraclePw); // JDBC URL -> DB 연결
		
		} catch(ClassNotFoundException e){ // JDBC driver 부재시 예외처리
			System.out.println("예외처리 1:"+e.getMessage()); // 예외 메시지 (console) 인쇄
			e.printStackTrace();
		} catch(Exception e){ // 모든 예외상황 처리
			System.out.println("예외처리 2:"+e.getMessage());
			e.printStackTrace();
		} finally {
			// System.out.println("JDBC 드라이버와 연결되었습니다");
		}
		return con;
	}

	/* (non-Javadoc)
	 * @see com.kysoft.member.DAO#getMembers()
	 */
	@Override
	public ArrayList<Member> getMembers() throws SQLException, Exception {
		
		Connection con = null;
		PreparedStatement pstmt = null; // 미리처리하기 때문에 쓴다. (빠르다)
		// Statement pstmt = null;
		ResultSet rs = null;
		
		ArrayList<Member> members = new ArrayList<Member>();
		Member member;
		// DB Table 의 1개의 레코드(record : row)를 불러오기 위한 temp(임시) 변수
		
		con = getConnection();
		String sql = "SELECT * FROM MEMBER2";
		
		try {
			pstmt = con.prepareStatement(sql);
			rs = pstmt.executeQuery();
			
					//pstmt = con.createStatement(); -> 
					//sql을 후에 처리 \ PraparedStatement 보다 SQL 구문 처리가 한단계 
                                        //늦기 때문에 SQL 처리 성능이 저하
					//rs = pstmt.executeQuery(sql);
					//※ CallableStatement : PL/SQL 처리할때 사용
					
			while(rs.next()){
				
				member = new Member(); // temp
				
				member.setId(rs.getString("id")); // id 필드값을 가져옴
				member.setPw(rs.getString("pw")); // pw 필드값을 가져옴
				
				members.add(member); // 한명의 정보 -> 전체 인원 현황 객체
			}
		
			 rs.close();
			 pstmt.close();
			 con.close();
			
		} catch(SQLException e) {
			System.out.println("예외처리 3:"+e.getMessage()); // 예외 메시지 (console) 인쇄
			e.printStackTrace();
		} catch(Exception e) {
			System.out.println("예외처리 4:"+e.getMessage());
			e.printStackTrace();
		}
		
		return members;
	}
}


로그인 예제
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Scanner;

import com.kysoft.member.MemberDAO;
import com.kysoft.member.Member;

class Javaex25
{
	public static void main(String[] args) 
	{
		HashMap<String, String> map = new HashMap<String, String>();
		
		MemberDAO dao = new MemberDAO();
		ArrayList<Member> members = new ArrayList<Member>();
		
		try {
			members = dao.getMembers();

		for(int i=0; i<members.size();i++)
			map.put(members.get(i).getId(),members.get(i).getPw());
		
		Scanner s = new Scanner(System.in);	// 화면으로부터 라인단위로 입력받는다.

		while(true) {
			System.out.println("id와 password를 입력해주세요.");
			System.out.print("id :");
			String id = s.nextLine().trim();

			System.out.print("password :");
			String password = s.nextLine().trim();
			System.out.println();

			if(!map.containsKey(id)) {
				System.out.println("입력하신 id는 존재하지 않습니다. 다시 입력해주세요.");
				continue;
			} else {
				if(!(map.get(id)).equals(password)) {
				 System.out.println("비밀번호가 일치하지 않습니다. 다시 입력해주세요.");
				} else {
					System.out.println("id와 비밀번호가 일치합니다.");						
					break;
				}
			}
		} // while
		} catch(SQLException e) {
			System.out.println("예외처리 :"+e.getMessage()); // 예외 메시지 (console) 인쇄
			e.printStackTrace();
		} catch(Exception e) {
			System.out.println("예외처리 6:"+e.getMessage());
			e.printStackTrace();
		}
	} // main
}


결과
id와 password를 입력해주세요.
id : a000001
password :1234

입력하신 id는 존재하지 않습니다. 다시 입력해주세요.
id와 password를 입력해주세요.
id :a0000001
password :1234

비밀번호가 일치하지 않습니다. 다시 입력해주세요.
id와 password를 입력해주세요.
id :a0000001
password :12345678

id와 비밀번호가 일치합니다.



반응형

'IT & programming > Java' 카테고리의 다른 글

8/20 - Event의 종류와 관련 인터페이스  (0) 2012.08.20
8/17 - 필기  (0) 2012.08.17
8/9 - 필기  (0) 2012.08.09
8/8 - Collection 요약정리  (0) 2012.08.08
8/7 - java.lang 패키지 : 문자열과 기본형간의 변환  (0) 2012.08.07
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31