PreparedStatement 객체

    하나의 객체로 여러번의 쿼리를 실행할 수 있으면, 동일한

    쿼리문을 특정 값만 바꾸어서 여러번 실행해야 할때, 매개변수가 많아서 쿼리문을 정리 

    해야 할 때 유용하다.

     

    PreparedStatement 객체 CRUD

    사용자 입력값 DB저장하기

     

    insert_form_preparestatement.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>Insert 실습</title>
    </head>
    <body>
    	<h2>사용자 입력값 DB저장하기-PreparedStatement객체 사용</h2>
    	<form action="insert_preparedstatement.jsp" method="post">
    		<p>아이디 : <input type="text" name="id"></p>
    		<p>비밀번호 : <input type="password" name="pw"></p>
    		<p>이름 : <input type="text" name="username"></p>
    		<p><input type="submit" value="전송"></p>
    	</form>
    </body>
    </html>

     

    insert_preparestatement.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>사용자 입력값 DB 저장하기</title>
    </head>
    <body>
    	<%@include file="dbconn.jsp" %> <!-- 접속할 DB코드를 페이지 지시자 태그로 가져옴 -->
    	
    	<%	
    		request.setCharacterEncoding("UTF-8");
    		
    		/* 사용자가 입력한 내용을 가져와서 변수에 저장함 */
    		String id = request.getParameter("id");
    		String pw = request.getParameter("pw");
    		String username = request.getParameter("username");
    		
    		//쿼리문 실행할 statement 객체 선언
    		PreparedStatement preparedStatement = null;
    		
    		try {
    			//쿼리문 작성
    			String sql = "insert into member values(?,?,?)";
    			
    			//Connection객체로부터 preparedStatement 얻어내는 코드, 매개변수값으로 sql로 넣어야 한다.
    			preparedStatement = connection.prepareStatement(sql);
    			
    			//PreparedStatement객체를 이용해서 각각 ?에 해당하는 값들을 지정해 준다.
    			preparedStatement.setString(1, id);
    			preparedStatement.setString(2, pw);
    			preparedStatement.setString(3, username);
    			
    			//쿼리문을 DB에 실행하는 코드
    			/* 단 쿼리문을 매개변수로 넣지 않아야한다.(이미 위에서 preparedStatement객체를 생성할때 넣었기 떄문) */
    			preparedStatement.executeUpdate();
    			out.println("member테이블에 정상적으로 입력 성공되었습니다." +"<br/>");
    			
    		}catch(SQLException e){
    			out.println("member테이블에 입력이 실패했습니다." +"<br/>");
    			out.println("SQLException : " +e.getMessage()+ "<br/>");
    			e.printStackTrace();
    		}finally {
    			//자원 해제 반드시 해야한다.
    			if(preparedStatement != null){
    				preparedStatement.close();
    			}
    			if(connection != null){
    				connection.close();
    			}
    		}
    	%>
    	<a href="select_statement.jsp">회원조회</a>
    </body>
    </html>


    DB SELECT 결과 - PreparedStatement

    select_preparestatement.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>DB SELECT 결과</title>
    </head>
    <body>
    	<%@include file="dbconn.jsp" %>
    	
    	<table border="1">
    		<tr>
    			<th width="300" align="center">아이디</th>
    			<th width="300" align="center">비밀번호</th>
    			<th width="300" align="center">이름</th>
    		</tr>
    		<%
    			PreparedStatement preparedStatement = null; 
    			ResultSet resultSet = null; //select한 결과를 받아오는 객체
    			
    			try {
    				String sql = "select * from member";
    				preparedStatement = connection.prepareStatement(sql);
    				resultSet = preparedStatement.executeQuery();
    				
    				//가져올 행이 있느냐?
    				while(resultSet.next()){
    					//해당하는 행의 컬럼값을 각각 저장하고 있다.
    					String id = resultSet.getString("id");
    					String pw = resultSet.getString("pw");
    					String username = resultSet.getString("username");
    		%>
    		<tr>
    			<td width="300" align="center"><%=id %></td>
    			<td width="300" align="center"><%=pw %></td>
    			<td width="300" align="center"><%=username %></td>
    		</tr>
    		<%
    				}
    			}catch(SQLException e) {
    				out.println("member테이블 select오류가 발생했습니다." +"<br/>");
    				out.println("SQLException : " +e.getMessage()+ "<br/>");
    				e.printStackTrace();
    			}finally {
    				if(resultSet != null){
    					resultSet.close();
    				}
    				if(preparedStatement != null){
    					preparedStatement.close();
    				}
    				if(connection != null){
    					connection.close();
    				}
    			}
    		%>
    	</table>
    	<a href="insert_form_preparedstatement.jsp">회원 가입</a>
    </body>
    </html>


    입력된 DB값 수정하기-PreparedStatement객체 사용

     

    update_form_preparestatement.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>update 실습</title>
    </head>
    <body>
    	<h2>입력된 DB값 수정하기-PreparedStatement객체 사용</h2>
    	<form action="update_preparestatement.jsp" method="post">
    		<p>아이디 : <input type="text" name="id"></p>
    		<p>비밀번호 : <input type="password" name="pw"></p>
    		<p>이름 : <input type="text" name="username"></p>
    		<p><input type="submit" value="전송"></p>
    	</form>
    </body>
    </html>

     

    update_preparestatement.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>DB데이터 수정</title>
    </head>
    <body>
    	<%@include file="dbconn.jsp" %> <!-- 접속할 DB코드를 페이지 지시자 태그로 가져옴 -->
    	
    	<%
    		request.setCharacterEncoding("UTF-8");
    			
    		/* 사용자가 입력한 내용을 가져와서 변수에 저장함 */
    		String id = request.getParameter("id");
    		String pw = request.getParameter("pw");
    		String username = request.getParameter("username");
    		
    		PreparedStatement preparedStatement = null;	//쿼리문을 실행할 Statement객체
    		ResultSet resultSet = null; //select한 결과를 받아오는 객체
    		
    		try {
    			String sql = "select id, pw, username from member where id = ? ";
    			preparedStatement = connection.prepareStatement(sql);
    			preparedStatement.setString(1, id);
    			resultSet = preparedStatement.executeQuery();
    			/*
     			if(statement != null)
    				statement.close();
    			*/ 
    			/* ResultSet 결과물을 가지고 온 Statement객체가 닫힐 경우 ResultSet객체도 함깨 닫힌다.(id pw 비교를 못함)*/
    			
    			if(resultSet.next()) { //select된값 비교한뒤 update
    				String rid = resultSet.getString("id");
    				String rpw = resultSet.getString("pw");
    				
    				if(id.equals(rid) && pw.equals(rpw)){
    					sql = "update member set username = ? where id = ? ";
    					
    					if(preparedStatement != null)
    						preparedStatement.close();
    					
    					preparedStatement = connection.prepareStatement(sql);
    					preparedStatement.setString(1, username);
    					preparedStatement.setString(2, id);		
    					preparedStatement.executeUpdate();
    					out.println(rid +"님의 정보를 수정했습니다.");
    				}
    				else {
    					out.println("아이디나 비밀번호가 일치하지 않습니다.");
    				}
    			}
    			else {
    				out.println("Member테이블에 잂치하는 아이디가 없습니다.");
    			}
    		}catch(SQLException e){
    			out.println("SQLException : " +e.getMessage()+ "<br/>");
    			e.printStackTrace(); //릴리즈에서는 생략해야한다.
    		}finally {
    			if(resultSet != null){
    				resultSet.close();
    			}
    			if(preparedStatement != null){
    				preparedStatement.close();
    			}
    			if(connection != null){
    				connection.close();
    			}
    		}
    	%>
    	<br/>
    	<a href="select_preparestatement.jsp">회원리스트</a> &nbsp;&nbsp;&nbsp; 
    	<a href="insert_form_preparestatement.jsp">회원가입</a>
    </body>
    </html>


    입력된 DB값 삭제하기-PreparedStatement객체 사용

     

    delete_form_preparestatement.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>delete 실습</title>
    </head>
    <body>
    	<h2>입력된 DB값 삭제하기-PreparedStatement객체 사용</h2>
    	<form action="delete_preparestatement.jsp" method="post">
    		<p>아이디 : <input type="text" name="id"></p>
    		<p>비밀번호 : <input type="password" name="pw"></p>
    		<p>이름 : <input type="text" name="username"></p>
    		<p><input type="submit" value="전송"></p>
    	</form>
    </body>
    </html>

     

    delete_preparestatement.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>DB데이터 삭제</title>
    </head>
    <body>
    	<%@include file="dbconn.jsp" %> <!-- 접속할 DB코드를 페이지 지시자 태그로 가져옴 -->
    	
    	<%
    		request.setCharacterEncoding("UTF-8");
    			
    		/* 사용자가 입력한 내용을 가져와서 변수에 저장함 */
    		String id = request.getParameter("id");
    		String pw = request.getParameter("pw");
    		String username = request.getParameter("username");
    		
    		PreparedStatement preparedStatement = null;	//쿼리문을 실행할 Statement객체
    		ResultSet resultSet = null; //select한 결과를 받아오는 객체
    		
    		try {
    			String sql = "select id, pw, username from member where id = ? ";
    			preparedStatement = connection.prepareStatement(sql);
    			preparedStatement.setString(1, id);
    			resultSet = preparedStatement.executeQuery();
    			/*
     			if(statement != null)
    				statement.close();
    			*/ 
    			/* ResultSet 결과물을 가지고 온 Statement객체가 닫힐 경우 ResultSet객체도 함깨 닫힌다.(id pw 비교를 못함)*/
    			
    			if(resultSet.next()) { //select된값 비교한뒤 update
    				String rid = resultSet.getString("id");
    				String rpw = resultSet.getString("pw");
    				
    				if(id.equals(rid) && pw.equals(rpw)){
    					sql = "delete from member where id = ? and pw = ? ";
    					
    					/* statement객체는 쿼리를 단 한번 실행한다. 재사용 하기위해서는 반드시 다시 Connection 객체로부터
    					statement객체를 얻어야한다.*/
    					if(preparedStatement != null)
    						preparedStatement.close();
    					
    					preparedStatement = connection.prepareStatement(sql);
    					preparedStatement.setString(1, id);
    					preparedStatement.setString(2, pw);
    					preparedStatement.executeUpdate();
    					out.println(rid +"님의 정보를 삭제했습니다.");
    				}
    				else {
    					out.println("아이디나 비밀번호가 일치하지 않습니다.");
    				}
    			}
    			else {
    				out.println("Member테이블에 잂치하는 아이디가 없습니다.");
    			}
    		}catch(SQLException e){
    			out.println("SQLException : " +e.getMessage()+ "<br/>");
    			e.printStackTrace();
    		}finally {
    			if(resultSet != null){
    				resultSet.close();
    			}
    			if(preparedStatement != null){
    				preparedStatement.close();
    			}
    			if(connection != null){
    				connection.close();
    			}
    		}
    	%>
    	<br/>
    	<a href="select_preparestatement.jsp">회원리스트</a> &nbsp;&nbsp;&nbsp; 
    	<a href="update_form_preparestatement.jsp">회원정보수정</a> &nbsp;&nbsp;&nbsp; 
    	<a href="insert_form_preparestatement.jsp">회원가입</a>
    </body>
    </html>

     

     


     

     

     

     

     

     

     

     

     

     

    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기
    loading