인터페이스 설계

package ch04;

import java.util.ArrayList;

public interface IUserDAO {
	
	// memberTBL 전체 조회 기능 
	ArrayList<UserDTO> select(); 
	// user 정보 저장 기능 
	int insert(UserDTO dto); 
	// user 정보 수정 기능 
	int update(UserDTO dto, String targetUserName); 
	// user 정보 삭제 기능 
	boolean delete(String username); 
}

DTO 설계

package ch04;

public class UserDTO {
	String username; 
	String birthYear; 
	String addr; 
	String mobile;
	
	public UserDTO(String username, String birthYear, String addr, String mobile) {
		this.username = username;
		this.birthYear = birthYear;
		this.addr = addr;
		this.mobile = mobile;
	}

	public String getUsername() {
		return username;
	}

	public String getBirthYear() {
		return birthYear;
	}

	public String getAddr() {
		return addr;
	}

	public String getMobile() {
		return mobile;
	} 
}

기능 구현하기

package ch04;

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

public class UserDAO implements IUserDAO {

	private DBClient dbClient;

	public UserDAO() {
		initData();
	}

	private void initData() {
		dbClient = new DBClient();
	}

	@Override
	public ArrayList<UserDTO> select() {
		ArrayList<UserDTO> list = new ArrayList<>();
		Connection conn = dbClient.getConnection();
		Statement stmt = null;
		ResultSet rs = null;
		try {
			stmt = conn.createStatement();
			rs = stmt.executeQuery("SELECT * FROM usertbl ");
			while (rs.next()) {
				String username = rs.getString("username");
				String birthYear = rs.getString("birthYear");
				String addr = rs.getString("addr");
				String mobile = rs.getString("mobile");

				UserDTO dto = new UserDTO(username, birthYear, addr, mobile);
				list.add(dto);
			}

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				rs.close();
				stmt.close();
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

		return list;
	}

	@Override
	public int insert(UserDTO dto) {

		String sqlFormat = "INSERT INTO " + "						usertbl(username, birthYear, addr, mobile) "
				+ "					 VALUES('%s', '%s', '%s', '%s') ";
		String sql = String.format(sqlFormat, dto.getUsername(), dto.getBirthYear(), dto.getAddr(), dto.getMobile());
		Connection conn = dbClient.getConnection();
		int resultRowCount = 0;
		Statement stmt = null;
		try {
			stmt = conn.createStatement();
			resultRowCount = stmt.executeUpdate(sql);

		} catch (Exception e) {
			// e.printStackTrace();
			System.err.println("잘 확인해주세요");
		} finally {
			try {
				stmt.close();
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return resultRowCount;
	}

	@Override
	public int update(UserDTO dto, String targetUserName) {

		String sqlFormat = "UPDATE userTbl " + "	SET birthYear = '%s', addr = '%s', mobile = '%s' "
				+ "    WHERE username = '%s' ";
		String sql = String.format(sqlFormat, dto.getBirthYear(), dto.getAddr(), dto.getMobile(), targetUserName);
		int resultRow = 0;

		try (Connection conn = dbClient.getConnection(); Statement stmt = conn.createStatement();) {
			resultRow = stmt.executeUpdate(sql);
		} catch (Exception e) {
			e.printStackTrace();
		}

		return resultRow;
	}

	@Override
	public boolean delete(String username) {
		boolean isOk = true; 
		
		String sqlFormat = "DELETE FROM userTBL WHERE username = '%s' ";
		String sql = String.format(sqlFormat, username);
		
		Connection conn = dbClient.getConnection();
		Statement stmt = null;
		
		try {
			stmt = conn.createStatement();
			stmt.executeUpdate(sql);
		} catch (SQLException e) {
			isOk = false; 
			// 실행에 흐름이 여기로 빠졌을 경우 
			// 구매 테이블에 데이터가 남아 있어서 유저 테이블에 삭제가 가능하다. 
		} catch (Exception e) {
			// TODO: handle exception
		}	finally {
			try {
				stmt.close();
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		
		return isOk;
	}

}

테스트

package ch04;

import java.util.ArrayList;

public class MainTest {

	public static void main(String[] args) {
		// 데이터 베이스에 접근해서 memberTBL에 대한 정보
		// 데이터 베이스에 접근해서 userTBL에 대한 정보

		UserDAO userDAO = new UserDAO();
		// 자식 테이블에 데이터를 먼저 삭제하고 부모테이블에 정보를 삭제할 수 있다.
		// 이승기는 구매 테이블 이력이 남아 있기 때문에 유저테이블에서 바로 삭제 할 수 없다. 
		boolean isDelete = userDAO.delete("이승기");
		System.out.println("isDelete : " + isDelete);
		if(isDelete == false) {
			System.out.println("구매테이블에 이력이 남아 있을 수 있습니다.");
		}
//		// insert 확인 
//		UserDTO dto = new UserDTO("유진스", "1995", "부산", "010-2222-2222");
//		int updateRowCount = userDAO.update(dto, dto.getUsername());
//		System.out.println("updateRowCount : " + updateRowCount);
		
		//int rowCount = userDAO.insert(insertDto);
		// 오류 발생 - 테이브 제약 조건 확인 addr 컬럼에는 문자열 2글자 까지만 입력 가능하다. 
		// int rowCount = userDAO.insert(new UserDTO("아이즈원", "2020", "경기도", "010-1234-1234"));
		//System.out.println("rowCount : " + rowCount);

		// select 확인
//		ArrayList<UserDTO> list = userDAO.select();
//		
//		for (int i = 0; i < list.size(); i++) {
//			System.out.println(list.get(i).getUsername());
//			System.out.println(list.get(i).getBirthYear());
//			System.out.println(list.get(i).getAddr());
//			System.out.println(list.get(i).getMobile());
//			System.out.println("----------------------");
//		}

	}

}

'MYSQL' 카테고리의 다른 글

hex 속성  (0) 2023.08.11
GROUP BY 절  (0) 2023.03.16
N : M 관계  (0) 2023.03.16
MySQL FUNCTION  (0) 2023.03.16
JOIN 구문  (0) 2023.03.16

+ Recent posts