본문 바로가기
Back/Spring

Day33_DAO+VO(DTO)로 회원가입 페이지 생성(DB에 연결) with Exception(오류코드)

by uxia 2023. 6. 21.

회원가입 페이지 생성을 위해

지난번에 했던 회원가입 페이지 코드를 가져와 DB에 연결한다.

 

회원가입 페이지를 설정할 insert.html 코드

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>

<style type="text/css">

body { /* 컨트롤 + / - 자동주석, 태그선택! */
	background: lightgray;
}

button {
	background: white;
}

.t1 { /* .은 클래스 선택!, 여러개선택!  */
	background: lightyellow;
	width: 150px;
	text-align: center;
}

#b1 { /* #은 아이디 선택!, 특정한 것 한 개만 선택! */
	color: red;
}
#b2{
	color: blue;
	
}
</style>
</head>
<body>
	<h3>회원가입 페이지</h3>
	<hr>
	<a href="member.html">
		<button id="b1">첫페이지로</button>
	</a>
	<!--form의 action은 무조건 jsp파일이되어야만 함. -->
	<form action="insert.jsp">
		<table border="1">
			<tr>
				<td class="t1">아이디 :</td>
				<td><input name="id"></td>
			</tr>
			<tr>
				<td class="t1">비밀번호 :</td>
				<td><input name="pw"></td>
			</tr>
			<tr>
				<td class="t1">회원이름 :</td>
				<td><input name="name"></td>
			</tr>
			<tr>
				<td class="t1">회원전화 :</td>
				<td><input name="tel"></td>
			</tr>
			<tr>
				<td colspan="2" class="t1">
					<button id="b2">회원가입 데이터 전송</button>
				</td>
			</tr>
		</table>
	</form>

	<!-- http://localhost:8898/web00/insert.jsp?id=dddd&pw=ddd&name=ddd&tel=ddddd -->

</body>
</html>

 

DB와 연결을 위한 insert.jsp 파일 코드

<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.DriverManager"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

<!-- 
    --- 여기에서 해야하는 작업 순서
    1. form 안에서 입력해서 서버로 전달할 값을 받아와서 ram(변수)에 저장
    2. 받은 데이터를 가지고 sql문 만들어서 db 서버로 전송
    3. 브라우저에게 결과가 어떻게 되었는 지 알려줘야 함(only html)
    -->

	<%
    // 자바코드를 넣을 수 있음
    // 필요한 코드블록만 넣을 수 있음
    /* 지금 이걸 작성하는 <, % 이 기호 스크립트릿(scriptlet)
       : 자바 코드를 일부만 작성하는 작은 프로그램 */
    // 1. 값을 받아서 Ram의 변수에 집어넣는다.
    // HttpServletRequest request = new HttpServletRequet();
    // id = apple & pw = 1234 & name = apple & tel = 011
    		// Cmd + Option + 화살표 아래 = 한 줄 복사
    String id = request.getParameter("id");
    String pw = request.getParameter("pw");
    String name = request.getParameter("name");
    String tel = request.getParameter("tel");
    // 내장된 객체 : request, response, session, application, model
    
    // db 연결해서 sql만든 후 전송
    //	1. 드라이버 설정
    Class.forName("com.mysql.cj.jdbc.Driver");
    //  out객체 : 내장된 객체, PrintWriter
    out.print("1. 드라이버 설정 성공");
    String url = "jdbc:mysql://localhost:3306/shop?serverTimezone=UTC";
    String user = "root";
    String password = "1234";
    //	2. DB 연결 - url(ip + port + db명), id, pw
    
    // jsp에서 import 단축키 : Cmd + Shift + M
    Connection con = DriverManager.getConnection(url, user, password); //Connection
    out.print("<br>2. DB 연결 성공"); 
    
    //	3. sql문 생성
    String sql = "insert into member values (?, ?, ?, ?)";
    //  위의 String은 자바에서는 sql문으로 인식을 못함
    //  -> sql문에 해당하는 부품으로 만들어줘야 함
    //  PreparedStatement --- sql
    PreparedStatement ps = con.prepareStatement(sql);
    ps.setString(1, id);
    ps.setString(2, pw);
    ps.setString(3, name);
    ps.setString(4, tel);
    
    out.print("<br>3. sql문 생성 성공");
    
    //	4. sql문 전송
    ps.executeUpdate();
    out.print("<br>4. sql문 전송 성공<br>");
    
    %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body bgcolor="lightgrey">
	<br> 요청에 대한 응답이 들어가는 부분 <br>
	<br> 서버로 전달된 id :
	<%= id %>
	<br> 서버로 전달된 pw :
	<%= pw %>
	<br> 서버로 전달된 name :
	<%= name %>
	<br> 서버로 전달된 tel :
	<%= tel %>
	<br>
</body>
</html>

 

브라우저와 DBeaver에서 출력 확인

 

 

다음으로 DAO와 VO(DTO) 파일을 만들어준다.

Java Resource → src에

com.multi.mvc006 이름의 패키지를 생성하고

그 안에 MemberDAO.java, Member.VO.java 두 파일을 생성해준다.

 

VO 파일에는 getters&setters를 이용해

아래와 같이 작성해준다.

package com.multi.mvc006;

public class MemberVO_DTO {
	// 가방 역할 -> 데이터 저장 목적 -> RAM에 공간을 만들어줘야 함
	
	private String id;
	private String pw;
	private String name;
	private String tel;
	
	// 가방에 데이터를 넣었다 뺐다 하는 역할이므로 get, set
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getPw() {
		return pw;
	}
	public void setPw(String pw) {
		this.pw = pw;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getTel() {
		return tel;
	}
	public void setTel(String tel) {
		this.tel = tel;
	}
	@Override
	public String toString() {
		return "MemberVO_DTO [id=" + id + ", pw=" + pw + ", name=" + name + ", tel=" + tel + "]";
	}
	
}

 

DAO에는 앞서 나온 insert.jsp에서 복사해와서

Java 파일에 맞게 수정해줬다.

package com.multi.mvc006;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

public class MemberDAO {
	// 멤버 변수, 멤버 메서드로 DAO 만들어주면 됨

	// DML(CRUD)
	// public void add(int x, int y)
	public void create(MemberVO_DTO bag) {
		//db 연결해서 sql만든 후 전송
		// 1. 드라이버 설정
		Class.forName("com.mysql.cj.jdbc.Driver");
		//  out객체 : 내장된 객체, PrintWriter
		System.out.println("1. 드라이버 설정 성공");
		String url = "jdbc:mysql://localhost:3306/shop?serverTimezone=UTC";
		String user = "root";
		String password = "1234";
		// 2. DB 연결 - url(ip + port + db명), id, pw

		// java에서 한번에 import 단축키 : Cmd + Shift + O
		Connection con = DriverManager.getConnection(url, user, password); //Connection
		System.out.println("<br>2. DB 연결 성공");

		// 3. sql문 생성
		String sql = "insert into member values (?, ?, ?, ?)";
		//  위의 String은 자바에서는 sql문으로 인식을 못함
		//  -> sql문에 해당하는 부품으로 만들어줘야 함
		//  PreparedStatement --- sql
		PreparedStatement ps = con.prepareStatement(sql);
		ps.setString(1, bag.getId());
		ps.setString(2, bag.getPw());
		ps.setString(3, bag.getName());
		ps.setString(4, bag.getTel());

		System.out.println("<br>3. sql문 생성 성공");

		// 4. sql문 전송
		ps.executeUpdate();
		System.out.println("<br>4. sql문 전송 성공<br>");
		
		ps.close();
		con.close();
	}

	@Override
	public String toString() {
		return "MemberDAO [getClass()=" + getClass() + ", hashCode()=" + hashCode() + ", toString()=" + super.toString()
		+ "]";
	}

	// row 1개 검색
	public void one() {

	}

	// rows 여러개 검색 
	public void list() {

	}

	// 
	public void update() {

	}

	public void delete() {

	}

}

근데 한번에 오류가 쫙 떴다.

 


Exception(예외 처리)

 

오류가 날 경우 페이지 자체가 날라가는 것이 아닌

오류난 부분만 오류가 뜨도록 하는 것이 exception인데,

반드시 exception 처리를 해줘야하는 세 가지 경우가 있다.

 

1. 외부자원(cpu) 연결 - 멀티스레드 핸들링하는 경우

2. 외부파일에서 읽고 쓰기하는 경우 → FileWriter, FileReader

3. 네트워크 연결 → 크롤링, DB 연결, TCP 연결

 

지금 에러가 나는 건 DB연결에서 오류가 난 것이다.

이에 따라 exception 처리를 해준다.

 

 

Exception 처리 방법

 

1. throws, throw

2. try-catch

 

 

여기서는 두 번째 방법으로 해결을 한다.

아래 사진과 같은 범위로 드래그를 해서 우클릭

surround with → Trycatch Block

하면 하단에 Try/catch 구문이 생기며 모든 오류가 해결된다.

 

여기까지 한 후 서버를 실행시켜본다.

 

DB까지 데이터가 들어온 것을 확인할 수 있다.

 

현재 여기까지 진행한 것이다.

 


 

insert.jsp에서 37라인에 오류가 났는데,

실행은 정상적으로 됐다.

 

dao.create(bag); 가 DAO 파일의 13라인

public void create(MemberVO_DTO bag) {

부분과 연결이 돼야하는데, 연결은 정상적으로 돼있다.

 

이건 단순히 Eclipse가 인식을 못해서 그런거라

양쪽 다 저장해주고 Project → Clean 해주면 오류가 사라진다.

 


 

방금 한 내용을 그대로 게시판을 만드는 실습이다.

 

- insert2.html

- insert2.jsp

- BbsDAO, BbsVO

파일로 게시판 글쓰기 기능을 완성하시오.

 

 

insert2.html 코드

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
	//alert('게시판글쓰기 페이지입니다. 반갑습니다.!')
</script>
<style type="text/css">
body { /* 컨트롤 + / - 자동주석, 태그선택! */
	background: #DEFBFF;
}

button {
	background: white;
}

.t1 { /* .은 클래스 선택!, 여러개선택!  */
	background: #FFE2E8;
	width: 150px;
	text-align: center;
}

#b1 { /* #은 아이디 선택!, 특정한 것 한 개만 선택! */
	color: red;
}
#b2{
	color: blue;
	
}
</style>
</head>
<body>
<!-- no, title, content, writer 게시판글쓰기  -->
	<h3>게시판 글쓰기 페이지</h3>
	<hr>
	<a href="bbs.html">
		<button id="b1">첫페이지로</button>
	</a>
	<form action="insert2.jsp">
		<table border="1">
			<tr>
				<td class="t1">No :</td>
				<td><input name="no"></td>
			</tr>
			<tr>
				<td class="t1">제목 :</td>
				<td><input name="title"></td>
			</tr>
			<tr>
				<td class="t1">내용 :</td>
				<td><input name="content"></td>
			</tr>
			<tr>
				<td class="t1">작성자 :</td>
				<td><input name="writer"></td>
			</tr>
			<tr>
				<td colspan="2" class="t1">
					<button id="b2">게시판 글쓰기 데이터 전송</button>
				</td>
			</tr>
		</table>
	</form>
</body>
</html>

 

insert2.jsp 코드

<%@page import="com.multi.mvc006.BbsDAO"%>
<%@page import="com.multi.mvc006.BbsVO"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.DriverManager"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

<!-- BbsVO bag = new BbsVO(); -->
	<jsp:useBean id = "bag" class = "com.multi.mvc006.BbsVO"></jsp:useBean>


<!-- reqiuest.getParameter("no"); bag.setId(no); -->
	<jsp:setProperty property = "*" name = "bag"/>

	<%
/*     String title = request.getParameter("title");
    String contet = request.getParameter("content");
    String writer = request.getParameter("writer");
    
    // 1. 가방을 만들어서 (객체(부품) 생성) 
    BbsVO_DTO bag = new BbsVO_DTO();
    // 벽돌틀 별돌1 = new 벽돌틀();
    
    // 2. 받은 데이터를 가방에 넣고 
    bag.setTitle(title);
    bag.setContent(content);
    bag.setWriter(writer); */
    
    // 3. DAO를 생성해 
    // 클릭하고 Cmd + Shift + M
    BbsDAO dao = new BbsDAO();
    
    // 4. Create해달라고 요청과 함께 가방 전달
    // cal.add(100, 200);
    dao.create(bag);
    
    %>

 

BbsVO.java 코드

package com.multi.mvc006;

public class BbsVO {
	// 가방 역할 -> 데이터 저장 목적 -> RAM에 공간을 만들어줘야 함
	
	private String no;
	private String title;
	private String content;
	private String writer;
	
	// 가방에 데이터를 넣었다 뺐다 하는 역할이므로 get, set

	public String getNo() {
		return no;
	}
	public void setNo(String no) {
		this.no = no;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public String getWriter() {
		return writer;
	}
	public void setWriter(String writer) {
		this.writer = writer;
	}
	@Override
	public String toString() {
		return "BbsVO [no=" + no + ", title=" + title + ", content=" + content + ", writer=" + writer + "]";
	}
	
}

 

BbsDAO.java 코드

package com.multi.mvc006;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class BbsDAO {

	// 멤버 변수, 멤버 메서드로 DAO 만들어주면 됨

	// DML(CRUD)
	// public void add(int x, int y)
	public void create(BbsVO bag) {
		try {
			//db 연결해서 sql만든 후 전송
			// 1. 드라이버 설정
			Class.forName("com.mysql.cj.jdbc.Driver");
			//  out객체 : 내장된 객체, PrintWriter
			System.out.println("1. 드라이버 설정 성공");
			String url = "jdbc:mysql://localhost:3306/shop?serverTimezone=UTC";
			String user = "root";
			String password = "1234";
			// 2. DB 연결 - url(ip + port + db명), id, pw

			// java에서 한번에 import 단축키 : Cmd + Shift + O
			Connection con = DriverManager.getConnection(url, user, password); //Connection
			System.out.println("<br>2. DB 연결 성공");

			// 3. sql문 생성
			String sql = "insert into bbs values (?, ?, ?, ?)";
			//  위의 String은 자바에서는 sql문으로 인식을 못함
			//  -> sql문에 해당하는 부품으로 만들어줘야 함
			//  PreparedStatement --- sql
			PreparedStatement ps = con.prepareStatement(sql);
			ps.setString(1, bag.getNo());
			ps.setString(2, bag.getTitle());
			ps.setString(3, bag.getContent());
			ps.setString(4, bag.getWriter());

			System.out.println("<br>3. sql문 생성 성공");

			// 4. sql문 전송
			ps.executeUpdate();
			System.out.println("<br>4. sql문 전송 성공<br>");

			ps.close();
			con.close();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	@Override
	public String toString() {
		return "MemberDAO [getClass()=" + getClass() + ", hashCode()=" + hashCode() + ", toString()=" + super.toString()
		+ "]";
	}

	// row 1개 검색
	public void one() {

	}

	// rows 여러개 검색 
	public void list() {

	}

	// 
	public void update() {

	}

	public void delete() {

	}

}

 

출력 결과

 


 

같은 실습, Delete, One도 실행

 

delete.html 코드

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
body { /* 컨트롤 + / - 자동주석, 태그선택! */
	background: #DEFBFF;
}

button {
	background: #FFE2E8;
}

.t1 { /* .은 클래스 선택!, 여러개선택!  */
	background: lightyellow;
	width: 150px;
	text-align: center;
}
</style>
</head>
<body>
<form action="delete.jsp" method="get">
<!-- http://localhost:8898/web00/delete2.jsp?no=100 -->
<!-- http의 header(요청주소+Get방식으로 넘어가는 데이터) -->
<table border="1">
			<tr>
				<td class="t1">탈퇴할 아이디 :</td>
				<td><input name="id"></td>
			</tr>
			<tr>
				<td colspan="2" class="t1">
					<button id="b2">탈퇴할 id 데이터 전송</button>
				</td>
			</tr>
		</table>

</form>
</body>
</html>

 

 

delete.jsp 코드

<%@page import="com.multi.mvc006.MemberDAO"%>
<%@page import="com.multi.mvc006.MemberVO"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.DriverManager"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

	<jsp:useBean id = "bag" class = "com.multi.mvc006.MemberVO"></jsp:useBean>
	<jsp:setProperty property = "id" name = "bag"/>

	<%
	
	MemberDAO dao = new MemberDAO();
	int result = dao.delete(bag);
	if(result == 1) {
		out.print("<h3>회원탈퇴 성공</h3>");
	} else {
		out.print("<h3>회원탈퇴 실패</he>");
	}
	
    %>

 

BbsDAO.java 코드

package com.multi.mvc006;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class BbsDAO {

	// 멤버 변수, 멤버 메서드로 DAO 만들어주면 됨

	// DML(CRUD)
	// public void add(int x, int y)
	public void create(BbsVO bag) {
		try {
			//db 연결해서 sql만든 후 전송
			// 1. 드라이버 설정
			Class.forName("com.mysql.cj.jdbc.Driver");
			//  out객체 : 내장된 객체, PrintWriter
			System.out.println("1. 드라이버 설정 성공");
			String url = "jdbc:mysql://localhost:3306/shop?serverTimezone=UTC";
			String user = "root";
			String password = "1234";
			// 2. DB 연결 - url(ip + port + db명), id, pw

			// java에서 한번에 import 단축키 : Cmd + Shift + O
			Connection con = DriverManager.getConnection(url, user, password); //Connection
			System.out.println("<br>2. DB 연결 성공");

			// 3. sql문 생성
			String sql = "insert into bbs values (?, ?, ?, ?)";
			//  위의 String은 자바에서는 sql문으로 인식을 못함
			//  -> sql문에 해당하는 부품으로 만들어줘야 함
			//  PreparedStatement --- sql
			PreparedStatement ps = con.prepareStatement(sql);
			ps.setString(1, bag.getNo());
			ps.setString(2, bag.getTitle());
			ps.setString(3, bag.getContent());
			ps.setString(4, bag.getWriter());

			System.out.println("<br>3. sql문 생성 성공");

			// 4. sql문 전송
			ps.executeUpdate();
			System.out.println("<br>4. sql문 전송 성공<br>");

			ps.close();
			con.close();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	@Override
	public String toString() {
		return "MemberDAO [getClass()=" + getClass() + ", hashCode()=" + hashCode() + ", toString()=" + super.toString()
		+ "]";
	}

	// row 1개 검색
	public void one() {

	}

	// rows 여러개 검색 
	public void list() {

	}

	// 
	public void update() {

	}

	public void delete() {

	}

}

 

BbsVO.java 코드

package com.multi.mvc006;

public class BbsVO {
	// 가방 역할 -> 데이터 저장 목적 -> RAM에 공간을 만들어줘야 함
	
	private String no;
	private String title;
	private String content;
	private String writer;
	
	// 가방에 데이터를 넣었다 뺐다 하는 역할이므로 get, set

	public String getNo() {
		return no;
	}
	public void setNo(String no) {
		this.no = no;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public String getWriter() {
		return writer;
	}
	public void setWriter(String writer) {
		this.writer = writer;
	}
	@Override
	public String toString() {
		return "BbsVO [no=" + no + ", title=" + title + ", content=" + content + ", writer=" + writer + "]";
	}
	
}

 

출력 결과

 

 

다음으로 One에 대한 코드다.

 

one.html 코드

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
body { /* 컨트롤 + / - 자동주석, 태그선택! */
	background: #DEFBFF;
}

button {
	background: #BDFFC5;
}

.t1 { /* .은 클래스 선택!, 여러개선택!  */
	background: lightyellow;
	width: 150px;
	text-align: center;
}
</style>
</head>
<body>
	<h3>개인정보 검색(상세) 페이지</h3>
	<hr>
	<a href="bbs.html">
		<button id="b1">첫페이지로</button>
	</a>
<hr>
<!--a태그는 무조건 get방식 요청 -->
<a href="http://localhost:8898/web00/one.jsp?id=apple2">
	<button style="background: pink">apple2</button>
</a>
<a href="http://localhost:8898/web00/one.jsp?id=apple3">
	<button style="background: pink">apple3</button>
</a>
<a href="http://localhost:8898/web00/one.jsp?id=spring">
	<button style="background: pink">spring</button>
</a>
<hr>

<form action="one.jsp" method="get">
<table border="1">
			<tr>
				<td class="t1">검색할 아이디 :</td>
				<td><input name="id"></td>
			</tr>
			<tr>
				<td colspan="2" class="t1">
					<button id="b2">검색할 id 데이터 전송</button>
				</td>
			</tr>
		</table>
</form>

</body>
</html>

 

one.jsp 코드

<%@page import="com.multi.mvc006.MemberDAO"%>
<%@page import="com.multi.mvc006.MemberVO"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.DriverManager"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<jsp:useBean id="bag" class="com.multi.mvc006.MemberVO"></jsp:useBean>
<jsp:setProperty property="id" name="bag" />
<%
	MemberDAO dao = new MemberDAO();
	MemberVO bag2 = dao.one(bag); // bag 
%>

검색한 id는 <%= bag2.getId() %> <br>
검색한 pw는 <%= bag2.getPw() %> <br>
검색한 name은 <%= bag2.getName() %> <br>
검색한 tel은 <%= bag2.getTel() %> <br>

 

 

MemberDAO.java 

package com.multi.mvc006;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class MemberDAO {
	// 멤버 변수, 멤버 메서드로 DAO 만들어주면 됨

	// DML(CRUD)
	// public void add(int x, int y)
	public void create(MemberVO bag) {
		try {
			//db 연결해서 sql만든 후 전송
			// 1. 드라이버 설정
			Class.forName("com.mysql.cj.jdbc.Driver");
			//  out객체 : 내장된 객체, PrintWriter
			System.out.println("1. 드라이버 설정 성공");
			String url = "jdbc:mysql://localhost:3306/shop?serverTimezone=UTC";
			String user = "root";
			String password = "1234";
			// 2. DB 연결 - url(ip + port + db명), id, pw

			// java에서 한번에 import 단축키 : Cmd + Shift + O
			Connection con = DriverManager.getConnection(url, user, password); //Connection
			System.out.println("<br>2. DB 연결 성공");

			// 3. sql문 생성
			String sql = "insert into member values (?, ?, ?, ?)";
			//  위의 String은 자바에서는 sql문으로 인식을 못함
			//  -> sql문에 해당하는 부품으로 만들어줘야 함
			//  PreparedStatement --- sql
			PreparedStatement ps = con.prepareStatement(sql);
			ps.setString(1, bag.getId());
			ps.setString(2, bag.getPw());
			ps.setString(3, bag.getName());
			ps.setString(4, bag.getTel());

			System.out.println("<br>3. sql문 생성 성공");

			// 4. sql문 전송
			ps.executeUpdate();
			System.out.println("<br>4. sql문 전송 성공<br>");

			ps.close();
			con.close();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}



	// row 1개 검색
	public MemberVO one(MemberVO bag) {
		ResultSet table = null;
		MemberVO bag2 = null;
		try {
			//db 연결해서 sql만든 후 전송
			// 1. 드라이버 설정
			Class.forName("com.mysql.cj.jdbc.Driver");
			//  out객체 : 내장된 객체, PrintWriter
			System.out.println("1. 드라이버 설정 성공");
			String url = "jdbc:mysql://localhost:3306/shop?serverTimezone=UTC";
			String user = "root";
			String password = "1234";
			// 2. DB 연결 - url(ip + port + db명), id, pw

			// java에서 한번에 import 단축키 : Cmd + Shift + O
			Connection con = DriverManager.getConnection(url, user, password); //Connection
			System.out.println("<br>2. DB 연결 성공");

			// 3. sql문 생성
			String sql = "select * from member where id = ?";
			//  위의 String은 자바에서는 sql문으로 인식을 못함
			//  -> sql문에 해당하는 부품으로 만들어줘야 함
			//  PreparedStatement --- sql
			PreparedStatement ps = con.prepareStatement(sql);
			ps.setString(1, bag.getId());

			System.out.println("<br>3. sql문 생성 성공");

			// 4. sql문 전송
			table = ps.executeQuery(); // 1, 0
			System.out.println("<br>4. sql문 전송 성공<br>");

			// 테이블에서 꺼내서 가방을 만들어 넣는다
			if(table.next()) {
				bag2 = new MemberVO();
				bag2.setId(table.getString("id"));
				bag2.setPw(table.getString("pw"));
				bag2.setName(table.getString("name"));
				bag2.setTel(table.getString("tel"));
			}

			ps.close();
			con.close();

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return bag2;

	}

	// rows 여러개 검색 
	public void list() {

	}

	// 
	public void update() {

	}

	public int delete(MemberVO bag) {
		int result = 0;
		try {
			//db 연결해서 sql만든 후 전송
			// 1. 드라이버 설정
			Class.forName("com.mysql.cj.jdbc.Driver");
			//  out객체 : 내장된 객체, PrintWriter
			System.out.println("1. 드라이버 설정 성공");
			String url = "jdbc:mysql://localhost:3306/shop?serverTimezone=UTC";
			String user = "root";
			String password = "1234";
			// 2. DB 연결 - url(ip + port + db명), id, pw

			// java에서 한번에 import 단축키 : Cmd + Shift + O
			Connection con = DriverManager.getConnection(url, user, password); //Connection
			System.out.println("<br>2. DB 연결 성공");

			// 3. sql문 생성
			String sql = "delete from member where id = ?";
			//  위의 String은 자바에서는 sql문으로 인식을 못함
			//  -> sql문에 해당하는 부품으로 만들어줘야 함
			//  PreparedStatement --- sql
			PreparedStatement ps = con.prepareStatement(sql);
			ps.setString(1, bag.getId());

			System.out.println("<br>3. sql문 생성 성공");

			// 4. sql문 전송
			result = ps.executeUpdate(); // 1, 0
			System.out.println("<br>4. sql문 전송 성공<br>");

			ps.close();
			con.close();

		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return result;

	}

}

 

 

One 출력 결과

 


 

 

car.html 코드

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
  <style>
    body {
      background-image: linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.4)),url("img/ferrari_image.jpg"); 
      background-size: cover;
      background-position: center center;
      font-family: Arial, sans-serif;
      margin: 0;
      padding: 0;
    }
    
    .container {
      display: flex;
      justify-content: center;
      align-items: center;
      height: 100vh;
    }
    
    .form {
      background-color: rgba(255, 255, 255, 0.7);
      padding: 20px;
      border-radius: 10px;
      text-align: center;
    }
    
    .form input[type="text"] {
      width: 100%;
      padding: 10px;
      margin-bottom: 10px;
      border: 1px solid rgba(0, 0, 0, 0.2); /* 변경: 검정색 옅은 테두리 추가 */
      border-radius: 5px;
      box-sizing: border-box;
    }
    
    .form button[type="submit"] {
      background-color: #BFFFFB;
      color: #000;
      border: none;
      border-radius: 5px;
      padding: 10px 20px;
      font-weight: bold;
      cursor: pointer;
    }
  </style>
</head>
<body>
  <div class="container">
    <div class="form">
      <h2>차량 정보 입력</h2>
      <form action = "car.jsp" method = "get">
        <input type="text" placeholder="VIN (Vehicle Identification Number)" required name = "vin">
        <input type="text" placeholder="Model" required name = "model">
        <input type="text" placeholder="Brand" required name = "brand">
        <input type="text" placeholder="Year" required name = "year">
        <button type="submit">제출</button>
      </form>
    </div>
  </div>
</body>
</html>

 

 

car.jsp 코드

<%@page import="com.multi.mvc006.CarDAO"%>
<%@page import="com.multi.mvc006.CarVO"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.DriverManager"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

	<%
		String vin = request.getParameter("vin");
		String model = request.getParameter("model");
		String brand = request.getParameter("brand");
		String year = request.getParameter("year");
		
		// 1. 가방 생성
		CarVO bag = new CarVO();
		
		// 2. 받은 데이터 가방에 넣기 
		bag.setVin(vin);		
		bag.setModel(model);		
		bag.setBrand(brand);		
		bag.setYear(year);		
		
		// 3. DAO 생성 
		CarDAO dao = new CarDAO();
		
		// 4. Create 해달라고 요청과 함께 가방 전달 
		dao.create(bag);
		
	%>
	
<!DOCTYPE html>
<html>
<head>
<meta charset = "UTF-8">
<title>Insert title here</title>
</head>
<body bgcolor = "lightgray">
	<br> 요청에 대한 응답이 들어가는 부분 <br>
	<br> 서버로 전달된 VIN : 
	<%= vin %>
	<br> 서버로 전달된 Model : 
	<%= model %>
	<br> 서버로 전달된 Brand : 
	<%= brand %>
	<br> 서버로 전달된 Year : 
	<%= year %>
	<br>
</body>
</html>

 

 

CarCO.java 코드

package com.multi.mvc006;

public class CarVO {
	
	private String vin;
	private String model;
	private String brand;
	private String year;
	
	public String getVin() {
		return vin;
	}
	public void setVin(String vin) {
		this.vin = vin;
	}
	public String getModel() {
		return model;
	}
	public void setModel(String model) {
		this.model = model;
	}
	public String getBrand() {
		return brand;
	}
	public void setBrand(String brand) {
		this.brand = brand;
	}
	public String getYear() {
		return year;
	}
	public void setYear(String year) {
		this.year = year;
	}
	
	@Override
	public String toString() {
		return "CarVO [vin=" + vin + ", model=" + model + ", brand=" + brand + ", year=" + year + "]";
	}
	
}

 

 

CarDAO.java 코드

package com.multi.mvc006;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import org.apache.tomcat.dbcp.dbcp2.PoolablePreparedStatement;

public class CarDAO {

	public void create(CarVO bag) {
		try {

			// 1. 드라이버 설정
			Class.forName("com.mysql.cj.jdbc.Driver");
			System.out.println("1. 드라이버 설정 성공");
			
			String url = "jdbc:mysql://localhost:3306/shop?serverTimezone=UTC";
			String user = "root";
			String password = "1234";
			// 2. DB연결 - url(ip + port + db명), id, pw
			
			Connection con = DriverManager.getConnection(url, user, password);	// Connection
			System.out.println("2. db연결 성공");

			// 3. sql문 생성 
			String sql = "insert into car values (?, ?, ?, ?)";
			PreparedStatement ps = con.prepareStatement(sql);
			ps.setString(1, bag.getVin());
			ps.setString(2, bag.getModel());
			ps.setString(3, bag.getBrand());
			ps.setString(4, bag.getYear());

			System.out.println("<br>3. SQL문 생성 성공");

			// 4. sql문 전송
			ps.executeUpdate();
			System.out.println("<br>4. SQL문 전송 성공<br>");

			ps.close();
			con.close();

		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}	

	}
	
}

 

 

이렇게 화면을 분할해서 순차적으로 하면

더 효율적이라고 한다.

 

 

출력 결과

 

취향 가득 담은 이번 실습 끝

꺅🤩