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 페이지 코드
<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
%>
성적 목록 페이지부터는 다음 게시글로!
'⁂ JSP > : 기본 익히기' 카테고리의 다른 글
[JSP] #5-1 Javabeans (0) | 2022.10.07 |
---|---|
[JSP] #4-2 jsp로 CRUD 작업하기(SQL 문법) - 공사중 (0) | 2022.10.06 |
[JSP] #3-3 Request 내부 객체의 다양한 메소드 (0) | 2022.10.05 |
[JSP] #3-2 다양한 폼 컨트롤 요소에 접근하기 (0) | 2022.10.05 |
[JSP] #3-1 폼(<form>)을 서버로 전송하기 (0) | 2022.10.05 |