반응형
SMALL
ErpDao 클래스 추가
추가 / 수정 / 삭제 / 목록조회
package dao;
import java.util.List;
import service.ErpException;
import dto.ErpDto;
public class ErpDao {
//추가
public void register(ErpDto erpdto) {
}
//수정
public void update(ErpDto erpdto) {
}
//삭제
public void delete(ErpDto erpdto) {
delete(erpdto.getId());
}
public void delete(int id) {
}
//목록 조회
public List<ErpDto> gets(){
return null;
}
}
return null; 은 일단 테스트하면서 하기 위해서 에러 안뜨게하려고 반환값을 임의로 지정하였다.
삭제 부분은 id 값만 알면 되기 때문에 int id를 매개변수로 받은 메서드를 하나 더 정의하여 넘겨주었다.
WRService
package service;
import javax.servlet.http.HttpServletRequest;
import dao.ErpDao;
import dto.ErpDto;
import constants.Sports;
public class WRService {
public void process(HttpServletRequest request) {
/** 데이터 유효성 검사 S */
String sports = request.getParameter("sports");
String sportNm = request.getParameter("sportNm");
int workoutSet = Integer.parseInt(request.getParameter("workoutSet"));
int workoutNum = Integer.parseInt(request.getParameter("workoutNum"));
if(sports == null || sports.trim().isEmpty()) {
throw new ErpException("운동 한 부위를 선택하세요");
}
if(sportNm == null || sportNm.trim().isEmpty()){
throw new ErpException("운동 종목을 입력 하세요");
}
if(workoutSet == 0){
throw new ErpException("세트 수 를 입력하세요");
}
if(workoutNum == 0){
throw new ErpException("횟수를 입력하세요");
}
/** 데이터 유효성 검사 E */
/** 등록 처리 */
ErpDto erpdto = new ErpDto();
erpdto.setSports(Enum.valueOf(Sports.class, sports));
erpdto.setSportNm(sportNm);
erpdto.setWorkoutSet(workoutSet);
erpdto.setWorkoutNum(workoutNum);
ErpDao erpdao = new ErpDao();
erpdao.register(erpdto);
}
}
자바 문서를 보면 ENUM 클래스에 문자를 가지고 찾는 메서드가 있는데 valueOf() 이다.
매개변수를 보면 Enum클래스에 이름값만 입력하면 되고 나머지 부분은 register 에 erpdto 데이터를 받아서 디비 처리하는 로직이다.
이제 register 기능을 구현해보자 ErpDao 로 가서 Connection 객체를 생성하였다.
//Connection 객체
public Connection getConnection() throws ClassNotFoundException, SQLException{
Class.forName("com.mysql.cj.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/erp?user=root&password=als@1655119";
Connection conn = DriverManager.getConnection(url);
return conn;
}
register
//추가
public void register(ErpDto erpdto) {
String sql = "INSERT INTO works (sports, sportNm, workoutSet, workoutNum) VALUES(?,?,?,?)";
try(Connection conn = getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setString(1, erpdto.getSports().toString());
pstmt.setString(2, erpdto.getSportNm());
pstmt.setInt(3, erpdto.getWorkoutSet());
pstmt.setInt(4, erpdto.getWorkoutNum());
pstmt.executeUpdate();
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
throw new ErpException("등록에 실패하였습니다.");
}
}
update
//수정
public void update(ErpDto erpdto) {
String sql = "UPDATE works" +
" SET " +
" sports = ? " +
" sportNm = ? " +
" workoutSet = ? " +
" workoutNum = ? " +
" WHERE id = ?";
try(Connection conn = getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql)){
pstmt.setString(1, erpdto.getSports().toString());
pstmt.setString(2, erpdto.getSportNm());
pstmt.setInt(3, erpdto.getWorkoutSet());
pstmt.setInt(4, erpdto.getWorkoutNum());
pstmt.setInt(5, erpdto.getId());
pstmt.executeUpdate();
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
throw new ErpException("수정에 실패하였습니다.");
}
}
delete
//삭제
public void delete(ErpDto erpdto) {
delete(erpdto.getId());
}
public void delete(int id) {
String sql ="DELETE FROM works WHERE id = ?";
try(Connection conn = getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setInt(1, id);
pstmt.executeUpdate();
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
throw new ErpException("삭제에 실패하였습니다.");
}
}
삭제 부분은 기본키가 id 이므로 id만 삭제하면 된다.
List
//목록 조회
public List<ErpDto> gets(){
String sql = "SELECT * FROM works ORDER BY id DESC";
List<ErpDto> list = new ArrayList<>();
try(Connection conn = getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
ResultSet rs = pstmt.executeQuery();
Timestamp _modDt = rs.getTimestamp("modDt");
while(rs.next()) {
LocalDateTime modDt = null;
if(_modDt != null) {
modDt = _modDt.toLocalDateTime();
}
list.add(new ErpDto(
rs.getInt("id"),
Enum.valueOf(Sports.class, rs.getString("sports")),
rs.getString("sportNm"),
rs.getInt("workoutSet"),
rs.getInt("workoutNum"),
rs.getTimestamp("regDt").toLocalDateTime(),
modDt
));
}
rs.close();
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
return list;
}
최신 작업순으로 조회
ResultSet 은 레코드를 한번에 가져오는게 아니라 각 레코드마다 이동하기 때문에 next()라는 메서드를 이용하자
자바 문서에서 ResultSet 을 검색해서 보자 아래 그림 참고
가 있다. 날짜와 시간데이터를 가져올 수 있다. 반환값이 Timestamp 값인데 날짜와 시간을 다룰 수 있는 클래스이다. 지금 필요한건 LocalDateTime 인데 Timestamp클래스를 클릭 후 보자 아래 그림 참고
데이터베이스로 getRimerstamp 가져 온 후 toLocalDateTime 하게 되면 기존 Dto 클래스에 있던 toLocalDateTime 가 바뀐다.
작업 내용 수정하려면 작업 id 에 해당하는 데이터를 가져와야해서 메서드를 하나 추가해봤다.
public ErpDto get(int id) {
ErpDto erpdto = null;
String sql = "SELECT * FROM works WHERE id = ?";
try(Connection conn = getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
ResultSet rs = pstmt.executeQuery();
if(rs.next()) {
LocalDateTime modDt = null;
Timestamp _modDt = rs.getTimestamp("modDt");
if(_modDt != null) {
modDt = _modDt.toLocalDateTime();
}
erpdto = new ErpDto(
rs.getInt("id"),
Enum.valueOf(Sports.class, rs.getString("sports")),
rs.getString("sportNm"),
rs.getInt("workoutSet"),
rs.getInt("workoutNum"),
rs.getTimestamp("regDt").toLocalDateTime(),
modDt
);
}
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
return erpdto;
}
'Servlet-Jsp' 카테고리의 다른 글
workout(운동기록프로그램 myBatis) #2 (0) | 2022.08.12 |
---|---|
workout (운동기록프로그램 myBatis) #1 (0) | 2022.08.11 |
운동기록프로그램(servlet-jsp) Service 부분 #3 (0) | 2022.08.07 |
운동기록프로그램(servlet-jsp) 데이터베이스 구성 #2 (0) | 2022.08.07 |
운동기록프로그램(servlet-jsp) #01 (0) | 2022.08.07 |
댓글