JSP + Servlet | JDBC - 테이블에 데이터 저장하기

파과·2022년 7월 18일
0

JSP + Servlet

목록 보기
22/33

insert를 위해서는 executeUpdate()의 매개변수로 insert문을 문자열 형태로 주어야 한다.

PreparedStatement 객체를 생성하면 보다 편하게 sql문을 작성할 수 있다.

PreparedStatement

Connection 인터페이스의 preparedStatement() 메소드를 호출한다.

PreparedStatement pstmt = con.prepareStatement(sql);

메소드의 인자로 사용할 sql문은 ?기호를 사용해 각 컬럼에 추가할 값을 지정하지 않은 상태로 넣을 수 있다 - 이를 바인드 변수라고 한다.

String sql = "insert into member values(?, ?, ?, ?, ?, ?)";

바인드 변수로 지정된 인자에 setXXX(int 순서, 실제 데이터나 변수) 메소드를 사용해 값을 할당해 준다.

pstmt.setString(1, name);

쿼리문 실행을 위해 executeXXX() 메소드를 호출한다. Statement 객체는 실행시 executeXXX(sql) 형태로 쿼리문을 전달해주었지만 PreparedStatement는 이미 쿼리문을 전달해주었기에 그냥 메소드만 호출하면 된다.

select문이면 executeQuery(),
delete, update, insert는 executeUpdate()를 실행한다.

pstmt.executeUpdate();

사용이 끝나면 close.

pstmt.close();

member 테이블에 데이터 추가하기

addMemberForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h2>회원의 정보 입력 폼</h2>
	<form method="post" action="addMember.jsp">
		<table>
			<tr>
				<td>이름</td>
				<td><input type="text" name="name" size="20"></td>
			</tr>
			<tr>
				<td>아이디</td>
				<td><input type="text" name="userid" size="20"></td>
			</tr>
			<tr>
				<td>비밀번호</td>
				<td><input type="password" name="pwd" size="20"></td>
			</tr>
			<tr>
				<td>이메일</td>
				<td><input type="text" name="email" size="20"></td>
			</tr>
			<tr>
				<td>전화번호</td>
				<td><input type="text" name="phone" size="11"></td>
			</tr>
			<tr>
				<td>등급</td>
				<td><input type="radio" name="admin" value="1"
					checked="checked"> 관리자 <input type="radio" name="admin"
					value="0"> 일반회원</td>
			</tr>
			<tr>
				<td><input type="submit" value="전송"></td>
				<td><input type="reset" value="취소"></td>
			</tr>
		</table>
	</form>
</body>
</html>

addMember.jsp

<%@ page import="java.sql.*" %>
<%@ page import="javax.sql.*" %>
<%@ page import="javax.naming.*" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<%!
	Connection conn = null;
	PreparedStatement pstmt = null;

	String sql = "insert into member values(?, ?, ?, ?, ?, ?)";
%>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>DB 연결</title>
</head>
<body>
	<%
		request.setCharacterEncoding("UTF-8");
		String name = request.getParameter("name");
		String userid = request.getParameter("userid");
		String pwd = request.getParameter("pwd");
		String email = request.getParameter("email");
		String phone = request.getParameter("phone");
		String admin = request.getParameter("admin");
		int updateCount = 0;
		
		
		try {
			//책과 다른 부분
			//괄호부분에 context.xml에 설정한 name을 추가함으로써 디비 정보 노출 없이 초기화할수 있다고 하였읍니다
			Context init = new InitialContext();
			DataSource ds = (DataSource)init.lookup("java:comp/env/jdbc/OracleDB");
			conn = ds.getConnection();
			
			pstmt = conn.prepareStatement(sql);

			pstmt.setString(1, name);
			pstmt.setString(2, userid);
			pstmt.setString(3, pwd);
			pstmt.setString(4, email);
			pstmt.setString(5, phone);
			pstmt.setInt(6, Integer.parseInt(admin));

			updateCount = pstmt.executeUpdate();
			
			if (updateCount != 0) {
	            System.out.println("회원가입 성공");
	        } else {
	            System.out.println("회원가입 실패");
	        }
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {

			try {
				if (pstmt != null)
					pstmt.close();
				if (conn != null)
					conn.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}//finally의 끝
	%>
	<h3>회원 가입 성공</h3>
	<a href="01_allMember.jsp"> 회원 전체 목록 보기 </a> 
</body>
</html>

0개의 댓글