본문 바로가기

프로그래밍/네트워크 프로그래밍

네트워크 프로그래밍-JSP(DB연동)

JSP와 DB연동

기존의 자바가 그저 데이터를 가져오기만 했다면, JSP를 이용해 DB 연동시 css, html등을 사용하여 꾸민 폼에 데이터를 입력이 가능하다.

간단하게 데이터를 테이블 형식으로 받아와보자.



다음 코드는 scott 계정의 student 테이블을  HTML테이블 형식으로 출력하는 코드이다.



<%@ page import="java.sql.*" %> 
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%
    Connection conn = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    %>

    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<center><h2>학생 신상 명세서</h2></center>

<table width = 800 border = 1 align = ceneter>
<tr>
<th>학번</th>
<th>이름</th>
<th>과목 번호</th>
<th>점수</th>
</tr>
<%
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:XE","scott","tiger");
String sql = "select * from student";
pstmt = conn.prepareStatement(sql);
rs=pstmt.executeQuery();
while(rs.next()){
out.println("<tr>");
out.println("<td>" + rs.getInt("NO") + "</td>");
out.println("<td>" + rs.getString("name")+"</td>");
out.println("<td>" + rs.getInt("SUBJECT_ID") + "</td>");
out.println("<td>" + rs.getInt("SCORE") + "</td>");
out.println("</tr>");
}
//앞서 말했듯이 HTML 사이에 JAVA, JSP를 사용하기 위헤서는 <%,%>사이에 코드를 써준다.
//반대로 <%,%>사이에 HTML을 사용하고 싶으면 out.println 사이에 HTML 코드를 입력한다
//get은 속성명이 NO, name, subject_id, score인 데이터들을 하나의 레코드 씩 가져온다.
//get 뒤에 가져올 데이터가 문자형이면 String을 정수형이면 Int를 입력한다.
rs.close();
pstmt.close();
conn.close();

} catch(Exception e){
e.printStackTrace();
} finally{
try{
if(rs != null) rs.close();
if(conn != null) conn.close();
if(pstmt != null) pstmt.close();
} catch(Exception e){
e.printStackTrace();
}
}
%>


</table>
</body>
</html>


명령어의 결과는 다음과 같다.



데이터를 수정, 입력하는 것도 비슷하게 진행하면된다.

우선 데이터 입력 폼을 만들어본다.



<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>신상 정보 업데이트 입력 폼</h2>
<table>
<form methoe="post" action="updateData.jsp">//updateDate.jsp로 입력 데이터를 전송한다.
<tr>
<td>NO</td><td><input type="text" name="no"></td>
</tr>
<tr>
<td>NAME</td><td><input type="text" name="name"></td>
</tr>
<tr>
<td>SUBJECT_ID</td><td><input type="text" name="sub_id"></td>
</tr>
<tr>
<td>SCORE</td><td><input type="text" name="score"></td>
</tr>
<td><input type="submit" value="갱신 전송"></td><td><input type="reset" value="갱신 취소"></td>

</form>
</table>
</body>
</html>

식의 결과는 다음과 같다.


다음 정보를 입력하면 NO를 기준으로 해당 데이터를 업데이트 하는 폼이다.


updateData.jsp는 다음과 같이 작성해주면된다.



<%@ page import = "java.sql.*" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
request.setCharacterEncoding("UTF-8");
String no = request.getParameter("no");
String name = request.getParameter("name");
String sub_id = request.getParameter("sub_id");
String score = request.getParameter("score"); 
//변수를 저장한다. 이때 주의할 점은 정수도 모두 String형으로 저장해야한다는 것이다.
//이전 html form에서 type을 text로 줬기때문에 숫자, 문자 모두 문자형으로 전송된다.
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;

try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:XE","scott","tiger");
String sql= "update student set name = ?, subject_id = ?, score = ? where no = ?";
//no를 기준으로 입력 값으로 값을 모두 변경해준다.
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,name);
pstmt.setInt(2,Integer.parseInt(sub_id));
pstmt.setInt(3,Integer.parseInt(score));
pstmt.setInt(4,Integer.parseInt(no));
//Integer.parseInt는 앞서 받은 문자열을 정수로 바꿔준다.
//각각 물음표에 이전에 지정한 변수를 알맞게 입력해준다.
rs=pstmt.executeQuery();
}catch(Exception e){
e.printStackTrace();
}finally{
try{
if(rs != null) rs.close();
if(pstmt != null) pstmt.close();
if(conn != null) conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
%>
<h3>수정이 완료되었습니다.</h3>
<a href = "DB_JSP.jsp">확인하기</a>
//위에서 만든 student table을 테이블 형식으로 보는 파일이다.
</body>
</html>


다음을 작성하고 다시 위에 만든 양식을 실행한다.


 no에만 기존에 있던 값을 입력하고 나머지는 임의의 값을 입력해준다.(no를 기준으로 update를 해준다)


확인하기를 눌러준다.


DB가 변경된 내용을 확인 가능하다.