티스토리 뷰
반응형
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 |
댓글