본문 바로가기

📚Study Note/JDBC

[ JDBC ] MemberDTO │ MemberDAO │ MemberMain

DTO 는 데이터 트랜스퍼 오브젝트 data transfer object 이고

DAO 는 데이터 액세스 오브젝트 data access object 이다. 

 

db 에 있는 TBL_MEMBER 테이블에서 데이터를 얻어오거나 데이터를 변경하도록 만들어주는 객체들

(그래서 이름이 MEMBER ~~~이다)

현재 TBL_MEMBER 를 구성하고 있는 컬럼명

 

/*==============
	MemberDTO.java	
 * ============*/

package com.test;

public class MemberDTO
{
	// 주요 속성 구성
	private int sid;
	private String name, tel;
	//getter/setter 구성
	
	
	
	public int getSid()
	{
		return sid;
	}

	public void setSid(int sid)
	{
		this.sid = sid;
	}

	public String getName()
	{
		return name;
	}

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

	public String getTel()
	{
		return tel;
	}

	public void setTel(String tel)
	{
		this.tel = tel;
	}
	


}

getter setter 는 마우스오른쪽버튼 >> source >> generate getters and setters 선택하면 자동으로 만들어짐

 

private 정보은닉으로 선언해둔 주요 변수들에 접근하기 위한 게터와 세터

 

package com.test;


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

import com.util.DBconn;

public class MemberDAO
{
	// 주요 변수 선언 → DB 연결 객체
	private Connection conn;

	
	
	// 생성자 정의 
	public MemberDAO() throws ClassNotFoundException, SQLException
	{
		conn = DBconn.getConnection();		 
	}
	
	// 메소드 정의 → 데이터를 입력하는 기능 → insert 
	
	public int add(MemberDTO dto) throws SQLException
	{
		// 반환할 결과값을 담아낼 변수(적용된 행의 갯수)
		int result =0;
		
		// 작업 객체 생성
		Statement stmt = conn.createStatement();
//		※ Statement 종류는 세 가지이다. 하나는 우리가 쓰고 있는 Statement, PreparedStatement, CallableStatement 할아버지 아버지 손자이다. 
//		할아버지인 Statement 는 하나의 쿼리를 사용하고 나면 더 이상 사용할 수 없다. 쓰고버리고 쓰고 버리면 리소스를 효율적으로 사용할 수 없고 보안성이 낮아요 즉 작업객체가 입구 내부를 왔다갔다하면서
//		도둑놈들을 잡을 수 없는 구조이다. 중간에서 절도를 하게 되면 이 금광을 실어나르면 수레를 약탈당할수도 , 보안향상해서 Prepared 전처리?를 하다보니 쿼리를 끼워서 보내다보니까 헤커들의 악의공격에 대비
//		즉, 하나의 Prepared 로 쿼리를 여러번 처리할 수 있다. Callable 은 개발자들이 사용하는 빈도는 적지만 자바에서 오라클 단에서 생성된 함수나 프로시저 등을 호출하는 statement이다. 
//		
//		수레..그릇 으로 이해하자 머리속으로그림을 그릴수있으면 좋다 Statement Statement Statement 는 일회용그릇, Prepared 는 집에서 쓰는 설거지해서 쓰는 그릇,
//		※ Statement 의 의미
//		 자바에서 사용되는 3가지 종류의 작업 객체들은 데이터베이스로 쿼리를 담아서 보내는 그릇정도로 생가하자.
//		 즉, 작업 객체에 쿼리를 실어 데이터베이스로 보내버리면 그 내용이 데이터베이스에서 처리되는 것이다.
//		 이 때, 한 번 사용하고 버리는 그릇은 Statement 이며 ,재 사용이 가능한 그릇은 Prepared 이다.
		 
		 // 쿼리문 준비
		 String sql = String.format("INSERT INTO TBL_MEMBER(SID,NAME,TEL) VALUES (MEMBERSEQ.NEXTVAL,'%s','%s')",dto.getName(),dto.getTel()) ;
		 
		 // 작업 객체를 활용하여 쿼리문 오라클에 전달
		 result = stmt.executeUpdate(sql);
				 
		// 리소스 반납
		stmt.close();
		// 최종 결과값 반환		 
		return result;

	}
	
	// 메소드 정의 → 전체 인원 수 확인 기능 → select(count)
	public int count() throws SQLException
	{
		// 결과값으로 반환하게 될 변수 선언 및 초기화
		int result=0;
		//작업 객체 생성
		Statement stmt = conn.createStatement();
		
		
		//쿼리문준비 select 
		String sql = "SELECT COUNT(*) AS COUNT FROM TBL_MEMBER";
		
		// 쿼리문 실행
		ResultSet rs = stmt.executeQuery(sql);

		
		// ResultSet 처리 → 반복문 구성 → 결과값 수신
		while (rs.next())
		{
			result = rs.getInt("COUNT"); //  COUNT(*)로 하면 에러난다.
            							// rs.getInt(1) 로 해도된다 .컬럼인덱스 첫번째 컬럼이라는 뜻
			
			
		}
		//리소스 반납
		rs.close();
		stmt.close();
		
		
		//최종 결과값반환
		return result;
	}
	// 메소드 정의 → 전체 리스트 조회 기능 → select
	public ArrayList<MemberDTO> list() throws SQLException
	{
		
		// 결과값으로 반환하게 될 변수 선언 및 초기화
		ArrayList<MemberDTO> result = new ArrayList<MemberDTO>();
		//MemberDTO mDTO = new MemberDTO();(while문 안으로 넣었다)
		
		// 작업 객체 생성
		Statement stmt = conn.createStatement();
		// 쿼리문 준비
		String sql = "SELECT SID, NAME, TEL FROM TBL_MEMBER ORDER BY SID";
		// 쿼리문 실행
		ResultSet rs = stmt.executeQuery(sql);
		
		// ResultSet 처리 반복문을 통해 결과값 수신
		while (rs.next()) //(다음 값이 있는지 없는지 확인)
		{
			
			MemberDTO mDTO = new MemberDTO();
			int sid = rs.getInt("SID");
			String name = rs.getString("NAME");
			String tel = rs.getString("TEL");
			
			mDTO.setSid(sid); //mDTO.setSid(rs.getString("SID"); 이렇게 해도 된다. 
			mDTO.setName(name);
			mDTO.setTel(tel);
			
			result.add(mDTO);
			
			
		}
		// 위에서 쓴 리소스 반납(resultset, stmt)
		rs.close();
		stmt.close();
		
		
		// 최종 결과값 반환
		return result;
		
		
	}
	 
 
  
}

ㅈ업객체 statement 를 생성한 후 쿼리문을 executeUpdate 또는 executeQuery 로 실행한 후 

결과값을 반환받고 그 결과값들을 return 해주던지, ResultSet 이라면 향상된 for문(for each)문을 통해

출력을 하거나 마지막 메소드처럼 그 값들을 ArrayList에 담아주고 return 해주면 된다. 

'📚Study Note > JDBC' 카테고리의 다른 글

[ JDBC ] getConnection() │ Connection.close()  (0) 2021.04.22