본문 바로가기

BackEnd/JSP

[JSP 웹 프로그래밍] JDBC 데이터베이스와 JSP 연동 2 (데이터베이스 쿼리 실행)

728x90
반응형

https://bobo12.tistory.com/261

 

[JSP 웹 프로그래밍] JDBC 데이터베이스와 JSP 연동 1 (JDBC 드라이버 로딩, DBMS 접속)

1. JDBC(Java DataBase Connectivity) ▷ 자바/JSP 프로그램 내에서 데이터베이스와 관련된 작업을 처리할 수 있도록 도와주는 자바 표준 인터페이스 ▷ 관계형 데이터베이스 시스템에 접근하여 SQL 문을 실

bobo12.tistory.com

 

3. 데이터베이스 쿼리 실행

◎ Statement 객체로 데이터 접근하기
   ▷ Statement 객체
      ▶ 정적인 쿼리에 사용
      ▶ 하나의 쿼리를 사용하고 나면 더는 사용할 수 없음
      ▶ 하나의 쿼리를 끝내면 close( )를 사용하여 객체를 즉시 해제해야 함
      ▶ close( )를 사용하여 객체를 즉시 해제하지 않으면 무시할 수 없는 공간이 필요하며 페이지가 

          다른 작업을 수행하는 동안 멈추지 않기 때문 
      ▶ 복잡하지 않은 간단한 쿼리문을 사용하는 경우에 좋음

 

   ▷ executeQuery() 메소드로 데이터 조회하기

 

   ▷ executeUpdate() 메소드로 데이터 삽입, 수정, 삭제하기
      ▶ executeUpdate( ) 메소드는 INSERT, UPDATE, DELETE 쿼리문을 통해 데이터를 삽입, 수정, 삭제하는 데 사용

 

◎ Statement 객체로 INSERT 쿼리문 실행하기 예제

1. member.sql
drop table member;

create table if not exists member(
	id varchar(20) not null,
	passwd varchar(20),
	name varchar(30),
	primary key(id)
);

desc member;

select * from member;​


2. 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="text" name="passwd">
		<p>이름 : <input type="text" name="name">
		<p><input type="submit" value="전송">
	</form>
</body>
</html>​


3. dbconn.jsp
<%@ page import="java.sql.*" %>
<%
	Connection conn = null;

	String url = "jdbc:mysql://localhost:3306/jspbookdb";
	String user = "root";
	String password = "1234";
	
	Class.forName("com.mysql.cj.jdbc.Driver");
	conn = DriverManager.getConnection(url, user, password);
%>​


4. insert01_proecss.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("SQLEception: " + ex.getMessage());
		} finally{
			if(stmt != null) stmt.close();
			if(conn != null) conn.close();
		}
	%>
</body>
</html>​

 

값을 입력해서 전송 버튼을 누르면 SQL에 값들이 저장됩니다.

db와 JSP를 연결하는 코드는 따로 작성하고 include를 통해서 해당 코드를 사용할 수 있도록 했습니다.

Statement를 이용하면 하나의 쿼리문만 사용할 수 있습니다.

try catch문을 이용해서 SQLException 예외처리를 해야하며 마지막에는 연결을 끊어줘야합니다!

 

 

◎ PreparedStatement 객체로 데이터 접근하기
   ▷ PreparedStatement 객체
      ▶ 동적인 쿼리에 사용
      ▶ Prepared Statement 객체는 하나의 객체로 여러 번의 쿼리를 실행할 수 있으며, 

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

 

 

◎ executeQuery() 메소드로 데이터 조회하기
   ▷ executeQuery( ) 메소드는 동적인 SELECT 쿼리문을 통해 데이터를 검색하는 데 사용

 

 executeUpdate() 메소드로 데이터 삽입, 수정, 삭제하기
   ▷ executeUpdate( ) 메소드는 INSERT, UPDATE, DELETE 쿼리문을 통해 데이터를 삽입, 수정, 삭제하는 데 사용

 

 

 

◎ PreparedStatement 객체로 INSERT 쿼리문 실행하기

1. 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="text" name="passwd">
		<p>이름 : <input type="text" name="name">
		<p><input type="submit" value="전송">
	</form>
</body>
</html>​​

 

2. 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("SQLEception: " + ex.getMessage());
		} finally{
			if(pstmt != null) pstmt.close();
			if(conn != null) conn.close();
		}
	%>
</body>
</html>​​


나머지는 위의 예제와 동일하게 사용합니다.

이렇게 실행을 하면 값이 MySQL로 전달이 됩니다.

PreparedStatement는 여러개의 쿼리문을 사용할 수 있습니다!

이번 예제에서는 하나의 쿼리문만 사용했어요!

 

Statement를 통해 하나의 쿼리만, PreparedStatement를 통해 여러개의 쿼리문을 사용할 수 있습니다.

 

쿼리문을 잘 알아야 데이터 베이스와 값들을 연동하는 것이 가능하겠어요!!

 

이때 DB 코드에서 MySQL과 연동이 되지 않는 경우가 많은데 localhost로 접속할 때는 cj를 빼야 문제 없이 연결 됩니다!!

 

다음 장에서 PreparedStatement를 통해 여러개의 쿼리문을 사용하는 예제들을 알아보죠!!

 

많은 분들의 피드백은 언제나 환영합니다!  많은 댓글 부탁드려요~~

 

728x90
반응형