JAVA
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이하일때 값을 입력하고 이외에는 중복이라는 프린트문을 출력하도록 한다.
요구사항을 들었을 때 첫번째로 생각해야하는건 메소드를 만들어야하나?
메소드를 만들어야한다면
public int insert(ExamVO vo) {return dao.insert(vo);}
먼저 service에 메소드를 만들어주고
serviceImpl에서 새로고침한 다음
Dao에 추상 메소드 만들고
DaoImpl에서 오버라이딩 해준 다음
내용은 리턴에 맞게 DaoImpl에서 작성 해주면 된다.