본문 바로가기
DB/Code

CODE [day_02] DB / 03. JDBC - DAO, VO class 활용

by 파프리카_ 2020. 8. 7.
728x90
반응형

[ class 종류 ] 

VO : Value Object  or DTO : Data Transfer Object
 - 정보 저장을 위한 Class
 - 데이터베이스의 Table과 연관됨
 ex) MemberDTO

 

DAO : Data Access Object 
- Repository
- 데이터베이스 연동 로직을 가지고있는 객체


main class

1.  MemberDAO()의 findMemberById(id)를 구현해보는 예제

- primary key인 id를 이용해 MEMBER TABLE의 회원정보가 전달하는 id에  부합되면, MemberVO 객체를 반환받고,
 ID에 해당하는 회원이 없으면 null을 반환한다.

 

/TestMemberDAO.java

package test;

import java.sql.SQLException;

/*
 * MemberDAO()의 findMemberById(id)를 구현해보는 예제
 * primary key인 id를 이용해 MEMBER TABLE의 회원정보가 전달하는 id에
 * 부합되면, MemberVO 객체를 반환받고,
 * ID에 해당하는 회원이 없으면 null을 반환한다.
 */
import model.MemberDAO;
import model.MemberVO;

public class TestMemberDAO {
	public static void main(String[] args) {
		try { // MemberDAO에서 throw해준 Exception을 try/catch해준다
				// 1. driver loading
			MemberDAO dao = new MemberDAO();
			String id = "java";
			MemberVO vo = null;

			try {
				// id로 회원정보 찾기
				vo = dao.findMemberById(id);
				if (vo == null)
					System.out.println(id + " 아이디에 해당하는 회원정보가 없습니다");
				else
					System.out.println("검색결과 -> " + vo);

			} catch (SQLException e) {
				e.printStackTrace();
			}
		} // try
		catch (ClassNotFoundException e) {
			e.printStackTrace();

		}
	}// main
}// class

 

2. MemberDAO의 getAllMemberList()를 구현하는 예제
- MEMBER TABLE 에 있는 모든 회원 정보를 ArrayList<MemberVO> 타입의 list 로 정보를 반환 받아보는 연습

 

/TestMemberDAO2.java

package test;

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

import model.MemberDAO;
import model.MemberVO;

/*
 * MemberDAO의 getAllMemberList()를 구현하는 예제
 * : MEMBER TABLE 에 있는 모든 회원 정보를 ArrayList<MemberVO> 타입의
 * list 로 정보를 반환 받아보는 연습
 */
public class TestMemberDAO2 {
	public static void main(String[] args)  {
		try 
		{	
			MemberDAO dao ;
			ArrayList<MemberVO> list;
			
			try {
				//1. driver loading
				dao = new MemberDAO();
				
				// getAllMemberList() 함수로 읽어오기
				list = dao.getAllMemberList();
				if (list.isEmpty()){
					System.out.println("테이블에 정보가 없습니다.");
				}else {
					for (int i = 0; i < list.size(); i++) {
						System.out.println(list.get(i));
						
					} 
				}
				
			} catch (SQLException e) {
				e.printStackTrace();
			}
		} // try
		catch (ClassNotFoundException e) {
			e.printStackTrace();

		}
		
	}// main
}// class

 

DAO class

/MemberDAO.java

package model;

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

/*
 * DAO : Data Access Object 
 * - Repository
 * - 데이터베이스 연동 로직을 가지고있는 객체
 */
public class MemberDAO {
	private String driver = "oracle.jdbc.OracleDriver";
	private String dbUrl = "jdbc:oracle:thin:@127.0.0.1:1521:xe";
	private String user = "scott";
	private String password = "tiger";

	// Constructor 생성자
	// 생성자 단계에서 driver loading을 실행하도록 한다
	// driver loading 단계에서 exception 발생 시, 실행한 곳에서 오류가 나도록 throws한다
	public MemberDAO() throws ClassNotFoundException {
		Class.forName(driver);
	}

	public MemberVO findMemberById(String id) throws SQLException {
		Connection con = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		MemberVO vo = null;

		try {
			// 2. Connection
			con = DriverManager.getConnection(dbUrl, user, password);

			// 3. SQL문 정의
			String sql = "SELECT PASSWORD, NAME, ADDRESS "
					+ "FROM MEMBER "
					+ "WHERE ID=?";

			// 4. PreparedStatement
			pstmt = con.prepareStatement(sql);

			// 5. SQL문 조건 완성
			pstmt.setString(1, id);

			// 6. SQL 실행
			rs = pstmt.executeQuery();
			if (rs.next()) {
				String id2 = rs.getString(1);
				String password = rs.getString(2);
				String name = rs.getString(3);
				String address = rs.getString(4);

				vo = new MemberVO(id2, password, name, address);
			}
			return vo;

		} finally {
			// 7. close
			closeAll(rs, pstmt, con);
		}

	}

	public void closeAll(ResultSet rs, PreparedStatement pstmt, Connection con) throws SQLException {
		if (rs != null)
			rs.close();
		if (pstmt != null)
			pstmt.close();
		if (con != null)
			con.close();

	}

	public ArrayList<MemberVO> getAllMemberList() throws SQLException {
		Connection con = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		ArrayList<MemberVO> list = new ArrayList<MemberVO>();
		
		try 
		{
			// 2. Connection
			con = DriverManager.getConnection(dbUrl, user, password);
			
			// 3. SQL문 정의
			String sql = "SELECT * FROM MEMBER";
					
			// 4. PreparedStatement
			pstmt = con.prepareStatement(sql);
			
			// 5. SQL 실행
			rs = pstmt.executeQuery();
			
			//6. list에 정보추가
				while(rs.next()) {
					
					MemberVO vo = new MemberVO(rs.getString(1),rs.getString(2), 
							rs.getString(3),rs.getString(4));
					list.add(vo);

				}//while
		}
		
		finally 
		{	//7. close
			closeAll(rs, pstmt, con);
		}
		
		return list;
	}//getAllMemberList
}

 

VO class

/MemberVO.java

package model;
/*
 * VO : Value Object
 * DTO : Data Transfer Object
 * - 정보 저장을 위한 Class
 * - 데이터베이스의 Table과 연관됨
 * ex) MemberDTO
 */
public class MemberVO {
	private String id;
	private String password;
	private String name;
	private String address;
	
	// Constructor를 2 가지로 만들어준다
	//1. 필수요소만 넣는 경우 - not null columns
	public MemberVO(String id, String password, String name) {
		super();
		this.id = id;
		this.password = password;
		this.name = name;
	}
	
	// 생성자 overloading
	//2. 모든 요소 넣는 경우 - all columns
	public MemberVO(String id, String password, String name, String address) {
		super();
		this.id = id;
		this.password = password;
		this.name = name;
		this.address = address;
	}

	
	@Override
	public String toString() {
		return "MemberVO [id=" + id + ", password=" + password + ", name=" + name + ", address=" + address + "]";
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}
	
	
}

 

[ 결과 ]

 

728x90
반응형