JSP
JSP 웹 프로그래밍 - JDBC로 데이터베이스와 JSP 연동 02 (데이터베이스 쿼리 실행, 쿼리문 실행 결과 값 가져오기)
록's
2023. 3. 8. 17:33
728x90
반응형
3. 데이터베이스 쿼리 실행
Statement 객체로 데이터 접근하기
- Statement 객체
- 정적인 쿼리에 사용
- 하나의 쿼리를 사용하고 나면 더는 사용할 수 없음
- 하나의 쿼리를 끝내면 close( )를 사용하여 객체를 즉시 해제해야 함
- close( )를 사용하여 객체를 즉시 해제하지 않으면 무시할 수 없는 공간이 필요하며 페이지가 다른 작업을 수행하는 동안 멈추지 않기 때문
- 복잡하지 않은 간단한 쿼리문을 사용하는 경우에 좋음
- executeQuery() 메소드로 데이터 조회하기
- executeUpdate() 메소드로 데이터 삽입, 수정, 삭제하기
- executeUpdate( ) 메소드는 INSERT, UPDATE, DELETE 쿼리문을 통해 데이터를 삽입, 수정, 삭제하는 데 사용
Statement 객체로 INSERT 쿼리문 실행하기
// sql/member.sql
drop table member; // 기존 데이터 있을수 있으니 한번 하고 create
create table if not exists member (
id varchar(20) not null,
passwd varchar(20),
name varchar(30),
primary key (id)
);
select * from member;
// insert01.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Database SQL</title>
</head>
<body>
<form method="post" action="insert01_process.jsp">
<p> 아이디 : <input type="text" name="id" >
<p> 비밀번호 : <input type="password" name="passwd">
<p> 이름 : <input type="text" name="name">
<p> <input type="submit" value="전송">
</form>
</body>
</html>
// dbconn.jsp
<%@ page import="java.sql.*" %>
<%
Connection conn = null;
String url = "jdbc:mysql://192.168.111.40:3306/JSPBookDB";
String user = "root";
String password = "1234";
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url, user, password);
%>
// insert01_process.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Database SQL</title>
</head>
<body>
<%@ include file="dbconn.jsp"%>
<%
request.setCharacterEncoding("utf-8");
String id = request.getParameter("id");
String passwd = request.getParameter("passwd");
String name = request.getParameter("name");
Statement stmt = null;
try {
String sql = "INSERT INTO Member(id, passwd, name) VALUES('" + id + "','" + passwd + "','" + name + "')";
stmt = conn.createStatement();
stmt.executeUpdate(sql);
out.println("Member 테이블 삽입이 성공했습니다.");
} catch (SQLException ex) {
out.println("Member 테이블 삽입이 실패했습니다.<br>");
out.println("SQLException : " + ex.getMessage());
} finally {
if (stmt != null)
stmt.close();
if (conn != null)
conn.close();
}
%>
</body>
</html>
- 출력 -
PreparedStatement 객체로 데이터 접근하기
- PreparedStatement 객체
- 동적인 쿼리에 사용
- Prepared Statement 객체는 하나의 객체로 여러 번의 쿼리를 실행할 수 있으며, 동일한 쿼리문을 특정 값만 바꾸어서 여러 번 실행해야 할 때, 매개변수가 많아서 쿼리문을 정리해야 할 때 유용
- executeQuery() 메소드로 데이터 조회하기
- executeQuery( ) 메소드는 동적인 SELECT 쿼리문을 통해 데이터를 검색하는 데 사용
- executeUpdate() 메소드로 데이터 삽입, 수정, 삭제하기
- executeUpdate( ) 메소드는 INSERT, UPDATE, DELETE 쿼리문을 통해 데이터를 삽입, 수정, 삭제하는 데 사용
PreparedStatement 객체로 INSERT 쿼리문 실행하기
// insert02.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Database SQL</title>
</head>
<body>
<form method="post" action="insert02_process.jsp">
<p> 아이디 : <input type="text" name="id" >
<p> 비밀번호 : <input type="password" name="passwd">
<p> 이름 : <input type="text" name="name">
<p> <input type="submit" value="전송">
</form>
</body>
</html>
// insert02_process.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Database SQL</title>
</head>
<body>
<%@ include file="dbconn.jsp"%>
<%
request.setCharacterEncoding("utf-8");
String id = request.getParameter("id");
String passwd = request.getParameter("passwd");
String name = request.getParameter("name");
PreparedStatement pstmt = null;
try {
String sql = "insert into member(id, passwd, name) values(?,?,?)";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, id);
pstmt.setString(2, passwd);
pstmt.setString(3, name);
pstmt.executeUpdate();
out.println("Member 테이블 삽입이 성공했습니다.");
} catch (SQLException ex) {
out.println("Member 테이블 삽입이 실패했습니다.<br>");
out.println("SQLException : " + ex.getMessage());
} finally {
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
}
%>
</body>
</html>
4. 쿼리문 실행 결과 값 가져오기
ResultSet 객체
- Statement 또는 PreparedStatement 객체로 SELECT 문을 사용하여 얻어온 레코드 값을 테이블 형태로 가진 객체
Statement 객체를 이용하여 SELECT 쿼리문 실행 결과 값 가져오기
// select01.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Database SQL</title>
</head>
<body>
<%@ include file="dbconn.jsp"%>
<table width="300" border="1">
<tr>
<th>아이디</th>
<th>비밀번호</th>
<th>이름</th>
</tr>
<%
ResultSet rs = null;
Statement stmt = null;
try {
String sql = "select * from member";
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
while (rs.next()) {
String id = rs.getString("id");
String pw = rs.getString("passwd");
String name = rs.getString("name");
%>
<tr>
<td><%=id%></td>
<td><%=pw%></td>
<td><%=name%></td>
</tr>
<%
}
} catch (SQLException ex) {
out.println("Member 테이블 호출이 실패했습니다.<br>");
out.println("SQLException: " + ex.getMessage());
} finally {
if (rs != null)
rs.close();
if (stmt != null)
stmt.close();
if (conn != null)
conn.close();
}
%>
</table>
</body>
</html>
- 출력 -
PreparedStatement 객체를 이용하여 SELECT 쿼리문 실행 결과 값 가져오기
// select02.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Database SQL</title>
</head>
<body>
<%@ include file="dbconn.jsp"%>
<table width="300" border="1">
<tr>
<th>아이디</th>
<th>비밀번호</th>
<th>이름</th>
</tr>
<%
ResultSet rs = null;
PreparedStatement pstmt = null;
try {
String sql = "select * from member";
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
while (rs.next()) {
String id = rs.getString("id");
String pw = rs.getString("passwd");
String name = rs.getString("name");
%>
<tr>
<td><%=id%></td>
<td><%=pw%></td>
<td><%=name%></td>
</tr>
<%
}
} catch (SQLException ex) {
out.println("Member 테이블 호출이 실패했습니다.<br>");
out.println("SQLException: " + ex.getMessage());
} finally {
if (rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
}
%>
</table>
</body>
</html>
Statement 객체를 이용하여 UPDATE 쿼리문 실행 결과 값 가져오기
// update01.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Database SQL</title>
</head>
<body>
<form method="post" action="update01_process.jsp">
<p> 아이디 : <input type="text" name="id" >
<p> 비밀번호 : <input type="password" name="passwd">
<p> 이름 : <input type="text" name="name">
<p> <input type="submit" value="전송">
</form>
</body>
</html>
// update01_process.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Database SQL</title>
</head>
<body>
<%@ include file="dbconn.jsp"%>
<%
request.setCharacterEncoding("utf-8");
String id = request.getParameter("id");
String passwd = request.getParameter("passwd");
String name = request.getParameter("name");
ResultSet rs = null;
Statement stmt = null;
try {
String sql = "select id, passwd from member where id = '" + id + "'";
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
if (rs.next()) {
String rId = rs.getString("id");
String rPasswd = rs.getString("passwd");
if (id.equals(rId) && passwd.equals(rPasswd)) {
sql = "update member set name = '" + name + "' where id = '" + id + "'" ;
stmt = conn.createStatement();
stmt.executeUpdate(sql);
out.println("Member 테이블을 수정했습니다.");
} else
out.println("일치하는 비밀번호가 아닙니다.");
} else
out.println("Member 테이블에 일치하는 아이디가 없습니다.");
} catch (SQLException ex) {
out.println("SQLException : " + ex.getMessage());
} finally {
if (rs != null)
rs.close();
if (stmt != null)
stmt.close();
if (conn != null)
conn.close();
}
%>
</body>
</html>
PreparedStatement 객체를 이용하여 UPDATE 쿼리문 실행 결과 값 가져오기
// update02.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Database SQL</title>
</head>
<body>
<form method="post" action="update02_process.jsp">
<p> 아이디 : <input type="text" name="id" >
<p> 비밀번호 : <input type="password" name="passwd">
<p> 이름 : <input type="text" name="name">
<p> <input type="submit" value="전송">
</form>
</body>
</html>
// update02_process.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Database SQL</title>
</head>
<body>
<%@ include file="dbconn.jsp"%>
<%
request.setCharacterEncoding("utf-8");
String id = request.getParameter("id");
String passwd = request.getParameter("passwd");
String name = request.getParameter("name");
ResultSet rs = null;
PreparedStatement pstmt = null;
try {
String sql = "select id, passwd from member where id = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, id);
rs = pstmt.executeQuery();
if (rs.next()) {
String rId = rs.getString("id");
String rPasswd = rs.getString("passwd");
if (id.equals(rId) && passwd.equals(rPasswd)) {
sql = "update member set name = ? where id = ?" ;
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, name);
pstmt.setString(2, id);
pstmt.executeUpdate();
out.println("Member 테이블을 수정했습니다.");
} else
out.println("일치하는 비밀번호가 아닙니다.");
} else
out.println("Member 테이블에 일치하는 아이디가 없습니다.");
} catch (SQLException ex) {
out.println("SQLException : " + ex.getMessage());
} finally {
if (rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
}
%>
</body>
</html>
Statement 객체를 이용하여 DELETE 쿼리문 실행 결과 값 가져오기
// delete01.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Database SQL</title>
</head>
<body>
<form method="post" action="delete01_process.jsp">
<p> 아이디 : <input type="text" name="id" >
<p> 비밀번호 : <input type="password" name="passwd">
<p> 이름 : <input type="text" name="name">
<p> <input type="submit" value="전송">
</form>
</body>
</html>
// delete01_process.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Database SQL</title>
</head>
<body>
<%@ include file="dbconn.jsp"%>
<%
request.setCharacterEncoding("utf-8");
String id = request.getParameter("id");
String passwd = request.getParameter("passwd");
String name = request.getParameter("name");
ResultSet rs = null;
Statement stmt = null;
try {
String sql = "select id, passwd from member where id = '" + id + "'";
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
if (rs.next()) {
String rId = rs.getString("id");
String rPasswd = rs.getString("passwd");
if (id.equals(rId) && passwd.equals(rPasswd)) {
sql = "delete from member where id = '" + id + "' and passwd = '" + passwd + "'" ;
stmt = conn.createStatement();
stmt.executeUpdate(sql);
out.println("Member 테이블을 삭제했습니다.");
} else
out.println("일치하는 비밀번호가 아닙니다.");
} else
out.println("Member 테이블에 일치하는 아이디가 없습니다.");
} catch (SQLException ex) {
out.println("SQLException : " + ex.getMessage());
} finally {
if (rs != null)
rs.close();
if (stmt != null)
stmt.close();
if (conn != null)
conn.close();
}
%>
</body>
</html>
PreparedStatement 객체를 이용하여 DELETE 쿼리문 실행 결과 값 가져오기
// delete02.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Database SQL</title>
</head>
<body>
<form method="post" action="delete02_process.jsp">
<p> 아이디 : <input type="text" name="id" >
<p> 비밀번호 : <input type="password" name="passwd">
<p> 이름 : <input type="text" name="name">
<p> <input type="submit" value="전송">
</form>
</body>
</html>
// delete02_process.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Database SQL</title>
</head>
<body>
<%@ include file="dbconn.jsp"%>
<%
request.setCharacterEncoding("utf-8");
String id = request.getParameter("id");
String passwd = request.getParameter("passwd");
String name = request.getParameter("name");
ResultSet rs = null;
PreparedStatement pstmt = null;
try {
String sql = "select id, passwd from member where id = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, id);
rs = pstmt.executeQuery();
if (rs.next()) {
String rId = rs.getString("id");
String rPasswd = rs.getString("passwd");
if (id.equals(rId) && passwd.equals(rPasswd)) {
sql = "delete from member where id = ? and passwd = ?" ;
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, name);
pstmt.setString(2, id);
pstmt.executeUpdate();
out.println("Member 테이블을 삭제했습니다.");
} else
out.println("일치하는 비밀번호가 아닙니다.");
} else
out.println("Member 테이블에 일치하는 아이디가 없습니다.");
} catch (SQLException ex) {
out.println("SQLException : " + ex.getMessage());
} finally {
if (rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
}
%>
</body>
</html>
728x90
반응형