Backend/JAVA_WEB
08. JavaBeans를 이용한 성적 테이블 CRUD 게시판 만들기 ① (DBopen, DBclose, DTO, DAO)
개발개발빈이
2022. 7. 6. 21:01
○ DBopen
package net.utility;
import java.sql.Connection;
import java.sql.DriverManager;
public class DBopen {
//오라클 DB 연결 메소드
public Connection getConnection() {
Connection con=null;
try {
String url ="jdbc:oracle:thin:@localhost:1521:xe";
String user ="system";
String password="1234";
String driver ="oracle.jdbc.driver.OracleDriver";
Class.forName(driver);
con =DriverManager.getConnection(url, user, password);
} catch (Exception e) {
System.out.println("오라클DB연결실패: " + e);
}//end
return con;
}//getConnection()
}//class end
○ DBclose
package net.utility;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class DBclose {
//DB연결 자원 반납
public static void close(Connection con) {
try {
if(con!=null) {con.close();}
} catch (Exception e) { }
}//end
public static void close(Connection con, PreparedStatement pstmt) {
try {
if(pstmt!=null) {pstmt.close();}
} catch (Exception e) { }
try {
if(con!=null) {con.close();}
} catch (Exception e) { }
}//end
public static void close(Connection con, PreparedStatement pstmt, ResultSet rs) {
try {
if(rs!=null) {rs.close();}
} catch (Exception e) { }
try {
if(pstmt!=null) {pstmt.close();}
} catch (Exception e) { }
try {
if(con!=null) {con.close();}
} catch (Exception e) { }
}//end
//static : 빨리 쓸 수 있다, continue
//overload
}//class end
○ DTO
package net.sungjuk;
public class SungjukDTO {//Data Transfer Objects 전송객체
//Value Object
//데이터를 한꺼번에 객체화해서 사용할 수 있다
//sungjuk테이블의 칼럼명을 기준으로 멤버변수(field) 선언
private int sno;
private String uname;
private int kor;
private int eng;
private int mat;
private int aver;
private String addr;
private String wdate;
public SungjukDTO() { } //기본생성자 default constructor
//private 멤버변수 각자에 대한 getter와 setter함수 작성
public int getSno() {
return sno;
}
public void setSno(int sno) {
this.sno = sno;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public int getKor() {
return kor;
}
public void setKor(int kor) {
this.kor = kor;
}
public int getEng() {
return eng;
}
public void setEng(int eng) {
this.eng = eng;
}
public int getMat() {
return mat;
}
public void setMat(int mat) {
this.mat = mat;
}
public int getAver() {
return aver;
}
public void setAver(int aver) {
this.aver = aver;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
public String getWdate() {
return wdate;
}
public void setWdate(String wdate) {
this.wdate = wdate;
}
//에러잡는 용도
@Override
public String toString() {
return "SungjukDTO [sno=" + sno + ", uname=" + uname + ", kor=" + kor + ", eng=" + eng + ", mat=" + mat
+ ", aver=" + aver + ", addr=" + addr + ", wdate=" + wdate + "]";
}
}//class end
○ DAO
package net.sungjuk;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import net.utility.DBclose;
import net.utility.DBopen;
public class SungjukDAO {
//Data Access Object
//데이터베이스 관련 비지니스 로직 구현
private DBopen dbopen=null;
private Connection con=null;
private PreparedStatement pstmt=null;
private ResultSet rs=null;
private StringBuilder sql=null;
public SungjukDAO() {
dbopen=new DBopen();
}
public int insert(String uname, int kor, int eng, int mat, int aver, String addr) {
int cnt=0;
try {
con=dbopen.getConnection();//DB연결
sql=new StringBuilder();
sql.append(" INSERT INTO sungjuk(sno, uname, kor, eng, mat, aver, addr, wdate) ");
sql.append(" VALUES(sungjuk_seq.nextval, ?, ?, ?, ?, ?, ?, sysdate) ");
pstmt = con.prepareStatement(sql.toString());
pstmt.setString(1, uname);
pstmt.setInt(2, kor);
pstmt.setInt(3, eng);
pstmt.setInt(4, mat);
pstmt.setInt(5, aver);
pstmt.setString(6, addr);
cnt=pstmt.executeUpdate();
}catch (Exception e) {
System.out.println("행추가 실패: " + e);
}finally{
DBclose.close(con, pstmt);
}//try end
return cnt;
}//insert() end
public int create(SungjukDTO dto) {
int cnt=0; //성공 또는 실패 여부 반환
try {
con=dbopen.getConnection();//DB연결
sql=new StringBuilder();
sql.append(" INSERT INTO sungjuk(sno, uname, kor, eng, mat, aver, addr, wdate) ");
sql.append(" VALUES(sungjuk_seq.nextval, ?, ?, ?, ?, ?, ?, sysdate) ");
pstmt = con.prepareStatement(sql.toString());
pstmt.setString(1, dto.getUname());
pstmt.setInt(2, dto.getKor());
pstmt.setInt(3, dto.getEng());
pstmt.setInt(4, dto.getMat());
pstmt.setInt(5, dto.getAver());
pstmt.setString(6, dto.getAddr());
cnt=pstmt.executeUpdate();
} catch (Exception e) {
System.out.println("행추가 실패: " + e);
}finally{
DBclose.close(con, pstmt);
}//try end
return cnt;
}//create() end
public ArrayList<SungjukDTO> list() {
//DB에서 가져온 데이터(rs)를 한꺼번에 모아서(ArrayList)
//sungjukList.jsp에 전달한다
ArrayList<SungjukDTO> list=null;
try {
con=dbopen.getConnection();//DB연결
sql=new StringBuilder();
sql.append(" SELECT sno, uname, kor, eng, mat, wdate ");
sql.append(" FROM sungjuk ");
sql.append(" ORDER BY sno DESC ");
pstmt = con.prepareStatement(sql.toString());
rs = pstmt.executeQuery();
if(rs.next()) {
list=new ArrayList<SungjukDTO>();//전체 행을 저장
do {
SungjukDTO dto = new SungjukDTO();//커서가 가리키는 한 줄 저장
dto.setSno(rs.getInt("sno"));
dto.setUname(rs.getString("uname"));
dto.setKor(rs.getInt("kor"));
dto.setEng(rs.getInt("eng"));
dto.setMat(rs.getInt("mat"));
dto.setWdate(rs.getString("wdate"));
list.add(dto); //list저장
}while(rs.next());
}else {
list=null;
}//if end
}catch (Exception e) {
System.out.println("목록불러오기 실패: " + e);
}finally{
DBclose.close(con, pstmt, rs);
}//try end
return list;
}//list() end
public SungjukDTO read(int sno) {
SungjukDTO dto = null;
try {
con=dbopen.getConnection();//DB연결
sql=new StringBuilder();
sql.append(" SELECT sno, uname, kor, eng, mat, aver, addr, wdate ");
sql.append(" FROM sungjuk ");
sql.append(" WHERE sno=? ");
pstmt = con.prepareStatement(sql.toString());
pstmt.setInt(1, sno);
rs = pstmt.executeQuery();
if(rs.next()) {
dto = new SungjukDTO();//커서가 가리키는 한 줄 저장
dto.setSno(rs.getInt("sno"));
dto.setUname(rs.getString("uname"));
dto.setKor(rs.getInt("kor"));
dto.setEng(rs.getInt("eng"));
dto.setMat(rs.getInt("mat"));
dto.setAver(rs.getInt("aver"));
dto.setAddr(rs.getString("addr"));
dto.setWdate(rs.getString("wdate"));
}else {
dto=null;
}//if end
}catch (Exception e) {
System.out.println("상세보기 실패: " + e);
}finally{
DBclose.close(con, pstmt, rs);
}//try end
return dto;
}//read() end
public int delete(int sno) {
int cnt=0;
try {
con=dbopen.getConnection();//DB연결
sql=new StringBuilder();
sql.append(" DELETE FROM sungjuk ");
sql.append(" WHERE sno=? ");
pstmt = con.prepareStatement(sql.toString());
pstmt.setInt(1, sno);
cnt=pstmt.executeUpdate();
}catch (Exception e) {
System.out.println("삭제 실패: " + e);
}finally{
DBclose.close(con, pstmt);
}//try end
return cnt;
}//delete() end
public int updateproc(SungjukDTO dto) {
int cnt=0; //성공 또는 실패 여부 반환
try {
con=dbopen.getConnection();//DB연결
sql=new StringBuilder();
sql.append(" UPDATE sungjuk ");
sql.append(" SET uname=?, kor=?, eng=?, mat=?, aver=?, addr=?, wdate=sysdate ");
sql.append(" WHERE sno=? ");
pstmt = con.prepareStatement(sql.toString());
pstmt.setString(1, dto.getUname());
pstmt.setInt(2, dto.getKor());
pstmt.setInt(3, dto.getEng());
pstmt.setInt(4, dto.getMat());
pstmt.setInt(5, dto.getAver());
pstmt.setString(6, dto.getAddr());
pstmt.setInt(7, dto.getSno());
cnt=pstmt.executeUpdate();
} catch (Exception e) {
System.out.println("행수정 실패: " + e);
}finally{
DBclose.close(con, pstmt);
}//try end
return cnt;
}//updateProc() end
}//class end