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>
<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>
<a href="update_form_preparestatement.jsp">회원정보수정</a>
<a href="insert_form_preparestatement.jsp">회원가입</a>
</body>
</html>