⁂ JSP/: 기본 익히기

[JSP] #4-1 jsp로 CRUD 작업하기(SQL 문법)

김갱환 2022. 10. 6. 14:55

1. JSP로 Database를 관리하기

 

 인터넷 시장이 활성화되기 시작하자, 자바도 조금 뒤늦게 이 대열에 합류하기 위해 JSP를 만들었다.

 그리고 점점 인터넷 시장이 활성화될 수록 여러 데이터베이스에 접근하는 것이 중요한 일이 되기 시작했다.

 

 JSP에서도 DB와 연결하는 두 가지 방법이 있는데 JDBC와 JPA이다.

 JDBC는 데이터베이스단과 연동하여 프로그래밍을 진행하는 것이고,

 JPA는 자바에서 데이터베이스까지 모두 관리하는 개념이다.

 

 우리는 그 중에서 JDBC를 활용하여 데이터베이스단과 연동하여 게시판을 작성하는 것을 해보려한다.

 SQL문을 작성한 후 오라클에 연동하여 SQL문을 실행시키려한다.

 

 

2. 기초적인 SQL문 작성

 

 우선 필요한 기초적인 SQL문부터 작성을 해보자.

-- sungjuk.sql

-- 성적테이블 삭제
drop table sungjuk;

-- 성적테이블 생성
create table sungjuk(
     sno   int         not null --일련번호
    ,uname varchar(50) not null --이름
    ,kor   int         not null --국어
    ,eng   int         not null --영어
    ,mat   int         not null --수학
    ,aver  int         null     --평균
    ,addr  varchar(50)          --주소
    ,wdate date                 --등록일(년월일시분초)
    ,primary key(sno)
);
-------------------------------------------------------------

[시퀀스 Sequence] - 일련번호 자동 생성
-- 시퀀스 생성 : create sequence 시퀀스명 
-- 시퀀스 삭제 : delete sequence 시퀀스명

-- sungjuk 테이블에서 사용할 시퀀스 생성
create sequence sungjuk_seq;

-- sungjuk_seq 시퀀스 삭제
delete sequence sungjuk_seq;

---------------------------------------------------------------

 

 

3. CRUD

 

1) 행추가

insert into sungjuk(sno, kor, eng, mat, aver, addr, wdate)
value(sungjuk_seq.nextval, ?, ?, ?, ?, ?, sysdate);

 

2) 전체목록

select * from sungjuk order by sno desc;

 

3) 상세보기

select * from sungjuk where sno=?;

 

4) 행삭제

delete from sungjuk where sno=?;

 

5) 행수정

update su0ngjuk
set uname=?, kor=?, eng=?, mat=?, aver=?, addr=?, wdate=sysdate
where sno=?

 

4. 페이지 만들기

 

1) 성적 게시판 페이지 흐름
 입력 -> 목록 -> 상세보기 -> 삭제/수정

 

2) 입력 페이지 만들기

sungjukForm.jsp -> sungjukIns.jsp

sungjukForm.jsp

 

 - sungjukForm 페이지 코드

<div class="frm">
    <h3>*성적 입력 폼*</h3>
    <p><a href="sungjukList.jsp"></a>[성적목록]</p>
    <form name="sungjukfrm" id="sungjukfrm" method="post" action="sungjukIns.jsp">
        <table>
        <tr>
          <th>이름 : </th>
          <td><input type="text" name="uname" maxlength="20" required autofocus></td>
        </tr> 
        <tr>
          <th>국어 : </th>
          <td><input type="number" name="kor" size="5" min="0" max="100" placeholder="숫자입력"></td>
        </tr>
        <tr>
          <th>영어 : </th>
          <td><input type="number" name="eng" size="5" min="0" max="100" placeholder="숫자입력"></td>
        </tr> 
        <tr>
          <th>수학 : </th>
          <td><input type="number" name="mat" size="5" min="0" max="100" placeholder="숫자입력"></td>
        </tr>
        <tr>
          <th>주소 : </th>
          <td>
              <select name="addr">
                  <option value="Seoul">서울</option>
                  <option value="Jeju">제주</option>
                  <option value="Suwon">수원</option>
                  <option value="Busan">부산</option>
              </select> 
          </td>
        </tr>
        <tr>
          <td colspan="2" align="center">
             <input type="submit" value="전송">
             <input type="reset"  value="취소">
          </td>
        </tr>
        </table>
    </form>
</div>

 

 - sungjukIns 페이지 코드

	<h3>* 성적 결과 페이지 *</h3>
<%
	// 한글 인코딩
	request.setCharacterEncoding("UTF-8");

	// 사용자가 입력한 정보를 가져와서 변수에 담기
	String uname = request.getParameter("uname").trim();
	int kor 	 = Integer.parseInt(request.getParameter("kor").trim());
	int eng 	 = Integer.parseInt(request.getParameter("eng").trim());
	int mat 	 = Integer.parseInt(request.getParameter("mat").trim());
	String addr  = request.getParameter("addr");
	
	// 평균 구하기
	int aver 	 = (kor+eng+mat)/3;
	
	// out.println("요청IP : " + request.getRemoteAddr());
	
	// Oracle DB 연결 및 행추가 -----------------------------
	Connection con = null;
	PreparedStatement pstmt = null;
	
	try {
		// 1) 오라클DB 서버 연결 관련 정보
		String url		= "jdbc:oracle:thin:@localhost:1521:xe"; // == "127.0.0.1"
		String user		= "system";
		String password	= "1234";
		String driver	= "oracle.jdbc.driver.OracleDriver"; // ojdbc6.jar
		
		
		// 2) 드라이버 로딩
		Class.forName(driver);
								
		// 3) 오라클 DB 서버 연결
		con = DriverManager.getConnection(url, user, password);
		
		// out.println("오라클DB 서버 연결 성공!!");
		
 		// 4) SQL 작성
		// -> 주의사항) SQL 종결문자 ; 를 쓰면 오류남
		StringBuilder sql = new StringBuilder();
		sql.append(" INSERT INTO sungjuk(sno, uname, kor, eng, mat, aver, addr, wdate)");
		sql.append(" VALUES (sungjuk_seq.nextval, ?, ?, ?, ?, ?, ?, sysdate)");
		// System.out.println(sql.toString());
		
		// 5) 작성된 문자열을 SQL 형식으로 변환하기
		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);
		
		// 6) SQL문 실행하기
		int cnt = pstmt.executeUpdate(); // INSERT, UPDATE, DELETE문 실행할 때 사용 -> int
										 // 실행했을 때 행의 갯수가 반환
		if(cnt==0){
			out.println("<p>성적 입력에 실패했습니다</p>");
			out.println("<p><a href='javascript:history.back()'>[다시시도]</a></p>");
		} else{
			out.print("<script>");
			out.print("		alert('성적이 입력되었습니다');");
			out.print(" 	location.href='sungjuk.Ljst.jsp';");
			out.print("</script>");
		} // if end		
		
	}catch(Exception e){
		out.println("오라클DB연결실패 : " + e);
	}finally{ // 자원반납
		try{
			if(pstmt!=null){pstmt.close();}
		} catch(Exception e){}
		try{
			if(con!=null){con.close();}
		} catch(Exception e){}
	} // end
	
%>

 

 

 

 성적 목록 페이지부터는 다음 게시글로!