57일차_JAVA

서창민·2023년 5월 31일
0

JAVA

목록 보기
10/21
post-thumbnail

23.05.31 수 57일차

JAVA

  • Examtbl - 검색셜과에 따른 레코드 수 출력하기

DAO 불러오기

package examtbl;
import java.util.List;
public interface ExamDao {
	  List<ExamVO> selectAll(ExamVO vo);
	  int  count (ExamVO vo);
}

DAO 파일

@Override
	public int count(ExamVO vo) {
		dbConn=DBConnection.getInstance();
		conn = dbConn.getConnection();
		String SQL ="";
		int tc =0 ;
		if (vo.ch1 == null || vo.ch2 == null || vo.ch2 ==""  ) {
			 SQL = "select  count(*) tc from examtbl";	
		}else if(vo.ch1.equals("sno")) {
		   SQL = "select count(*) tc  from examtbl where sno like ?";
		}else if(vo.ch1.equals("sname")) {
		   SQL = "select count(*) tc  from examtbl where sname like ?";	
		}
	
		try {
			if (vo.ch1 == null || vo.ch2 == null || vo.ch2 =="" ) {
			  pstmt = conn.prepareStatement(SQL);	
			} else if(vo.ch1.equals("sno")) {
			  pstmt = conn.prepareStatement(SQL);
			  pstmt.setString(1, "%"+vo.ch2+"%");
			}else if(vo.ch1.equals("sname")) {
			  pstmt = conn.prepareStatement(SQL);
			  pstmt.setString(1, "%"+vo.ch2+"%");
			}
			 rs = pstmt.executeQuery();
			 if(rs.next()) {
			   tc = rs.getInt("tc");
			 }else {
			   tc = 0; 
			 }
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			dbConn.close2(rs, pstmt, conn);
		}		
		return tc;
	}

값또는 칼럼이 NULL일때 전체 레코드를 출력하고
칼럼이 입력됐으면 쿼리문을 실행하여 포함하는 글자가 있는 레코드를 출력해주도록 설계한다.


MAIN

package examtbl;

import java.util.List;

public class ExamMain {

	public static void main(String[] args) {
		ExamService	 s = new ExamServiceImpl();
		// 학번 또는 이름 을 가지고 검색을 할 수 있도록 수정하시오.
		ExamVO vo = new ExamVO();
		vo.setCh1("sno"); // sno, sname  둘 중 입력
		vo.setCh2("");
		List<ExamVO> li = s.selectAll(vo);
		System.out.println("==============================================================");
		System.out.println("학번\t이름\t국어\t영어\t수학\t역사\t합계\t평균 ");
		System.out.println("==============================================================");
		for(ExamVO m:li) {
			String sno = m.getSno();
			String sname = m.getSname();
			int kor = m.getKor();
			int eng = m.getEng();
			int math = m.getMath();
			int hist = m.getHist();
			int sum = kor+ eng + math + hist ;
			double avg = sum / 4.0 ;
			System.out.println(sno +"\t"+ sname +"\t"+ kor+"\t"+eng +"\t"+math+"\t"+ hist +"\t"+ sum +"\t"+ avg);
			System.out.println("--------------------------------------------------------------");
		}
		
		int tc=s.count(vo);
		System.out.println("레코드 수: "+tc);
	}

메인화면에서 학번또는 이름을 가지고 검색하여 레코드를 출력하도록 한다.


  • 레코드 중복 체크하기

DAO - INSERT

	@Override
	public int insert(ExamVO vo) {
		int k =0 ;
		try {
              
			int tc = 0 ;
			
			dbConn=DBConnection.getInstance();
			conn = dbConn.getConnection();
			
			String TC_SQL = "select count(*) tc from examtbl where sno = ?";
			pstmt=conn.prepareStatement(TC_SQL);
			pstmt.setString(1,vo.getSno());
			rs = pstmt.executeQuery();
			rs.next(); // 값이 없으면 0 이 출력된다.
			tc = rs.getInt("tc");
			System.out.println("===>(TC) : " + tc);
			if (tc <= 0) {
				String INSERT_SQL ="insert into examtbl(sno, sname,kor,eng,math,hist) values(?,?,?,?,?,?) ";
				pstmt = conn.prepareStatement(INSERT_SQL);
				pstmt.setString(1, vo.getSno());
				pstmt.setString(2, vo.getSname());
				pstmt.setInt(3, vo.getKor());
				pstmt.setInt(4, vo.getEng());
				pstmt.setInt(5, vo.getMath());
				pstmt.setInt(6, vo.getHist());
				k =pstmt.executeUpdate();
			} else {
				System.out.println("학번이 중복되었습니다.");
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			dbConn.close1(pstmt, conn);
		}
		return k;
  }

insert 메소드는 ExamVO 객체를 매개변수로 받아서 데이터베이스에 데이터를 삽입하는 역할을 하고, 매개변수의 값이 0이하일때 값을 입력하고 이외에는 중복이라는 프린트문을 출력하도록 한다.


  • TIP
요구사항을 들었을 때 첫번째로 생각해야하는건 메소드를 만들어야하나?

메소드를 만들어야한다면 
public int insert(ExamVO vo) {return dao.insert(vo);} 
먼저 service에 메소드를 만들어주고 
serviceImpl에서 새로고침한 다음 
Dao에 추상 메소드 만들고
DaoImpl에서 오버라이딩 해준 다음 
내용은 리턴에 맞게 DaoImpl에서 작성 해주면 된다.
profile
Back-end Developer Preparation Students

0개의 댓글

Powered by GraphCDN, the GraphQL CDN