본문 바로가기
멀티캠퍼스 풀스택 과정/백엔드

백엔드1-5. JSP-4 : JAVA와 DB의 연동(emp테이블사용)-1

by 이쟝 2022. 3. 3.

2022.01.19 - [멀티캠퍼스 풀스택 과정/데이터베이스] - 데이터베이스2-1 JDBC로 JAVA와 DB의 연동(SELECT문)

 

데이터베이스2-1 JDBC로 JAVA와 DB의 연동(SELECT문)

JDBC API - Java DataBase Connectivity의 약자로 JDBC는 자바 언어로 데이터베이스 프로그래밍을 하기 위한 라이브러리 - JDBC는 DBMS에 종속되지 않는 관련 API를 제공한다. - JDBC API는 JDK에서 제공하며 JDBC..

everysmallstep.tistory.com

2022.01.19 - [멀티캠퍼스 풀스택 과정/데이터베이스] - 데이터베이스2-3 JDBC로 JAVA와 DB의 연동(INSERT문)

 

데이터베이스2-3 JDBC로 JAVA와 DB의 연동(INSERT문)

https://everysmallstep.tistory.com/121 데이터베이스2-1 JDBC로 JAVA와 DB의 연동(SELECT문) JDBC API - Java DataBase Connectivity의 약자로 JDBC는 자바 언어로 데이터베이스 프로그래밍을 하기 위한 라이브..

everysmallstep.tistory.com

시작하기 전에 연동하는 거 복습 다시 해야 이해가 간다...(DB 다시 복습)


1. Workbench 실행해서 DB table 불러오기

(비밀번호 root1106..)
SHOW DATABASES;
USE demo; 
SHOW TABLES;
SELECT * FROM emp;

여기에 사원등록추가하기!!


2. 사원등록 form을 보여줄 index.jsp 생성

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>index.jsp</title>
</head>
<body>
    <h3>사원등록 form</h3>
    <!-- a href -> "webJSP/J02_response_jdbc/empForm.jsp"-->
    <a href="<%=request.getContextPath()%>/J02_response_jdbc/empForm.jsp">사원등록</a>
</body>
</html>


3. 사원등록 form인 empForm.jsp 생성

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>empForm.jsp</title>
</head>
<body>
				              <!--webJSP/J02_response_jdbc/empFormOk.jsp -->
<form method="post" action="<%=request.getContextPath()%>/J02_response_jdbc/empFormOk.jsp">
		<!-- 서버로 갈 데이터 name을 선언할 때는 DB에 있는 필드명과 동일하게 한다.  -->
		사원번호 : <input type="text" name="empno"/><br/>
		사원명 : <input type="text" name="ename"/><br/>
		연봉 : <input type="text" name="sal"/><br/>
		부서코드 : <input type="text" name="deptno"/><br/>
		<br/>
		<input type="submit" value="사원등록"/>
</form>
</body>
</html>


4. 사원등록을 DB TABLE에 추가하기 위해 DB 연동 파일인 empFormOk.jsp 생성

4-0. 이름이 있기 때문에 한글 인코딩 먼저

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
	request.setCharacterEncoding("utf-8");
%>

 

4-1. 폼의 데이터를 서버로 가져오기 : request

변수의 타입을 정할 때는 DB의 필드의 데이터 타입에 맞춰서 하는 게 좋음

DB에서 DESC *&amp;amp;nbsp; FROM 테이블명

<%  
	//1. 폼의 데이터를 서버로 가져오기 : request
	// DB의 데이터타입과 맞추기
	int empno = Integer.parseInt(request.getParameter("empno"));
	String ename = request.getParameter("ename");
	int sal = Integer.parseInt(request.getParameter("sal"));
	int deptno = Integer.parseInt(request.getParameter("deptno"));
%>

 

4-2. 드라이브로딩과 DB 연결

드라이브를 로딩하는 것과 DB 연결하는 메서드를 생성해서 메서드 호출하기(선언부에)

import="java.sql.Connection"  import="java.sql.DriverManager"
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.DriverManager"%>
<%!
	// 선언부에 드라이브를 로딩하는 것과 DB를 연결하는 메서드 생성
        // 드라이브 로딩과 DB연결
	public Connection getConnection(){
		Connection con = null;
		try{              // Driver.class가 있는 파일의 경로
			Class.forName("com.mysql.cj.jdbc.Driver");  
									// 서버IP주소/DB명,계정,비밀번호		
			con = DriverManager.getConnection("jdbc:mysql://127.0.0.1/demo","root","root1106");
		}catch(Exception e){
			System.out.println("DB연결 에러 발생...");
			e.printStackTrace();
		}
		return con;
	}
%>
<%
	//  한글 인코딩 

	//1. 폼의 데이터를 서버로 가져오기 
	...
	
	// 2. DB 연결 (드라이브 로딩이 되어서 DB연결하는 메서드 호출)
	Connection conn = getConnection();
    
 %>

 

4-3. PreparedStatement 객체 만들기(sql): insert쿼리문을 문자열로 하고 값 세팅

쿼리문을 가지고 PreparedStatement 객체를 생성하고 삽입할 쿼리문 값을 세팅한다. 

PreparedStatement객체는 conn(Connection 객체)의 prepareStatement 메서드를 통해서 만들기

import="java.sql.PreparedStatement"
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.PreparedStatement"%>
<%!
	// 선언부에 드라이브를 로딩하는 것과 DB를 연결하는 메서드 생성
        // 드라이브 로딩과 DB연결
%>
<%
	//  한글 인코딩 

	//1. 폼의 데이터를 서버로 가져오기 
	...
	// 2. DB 연결 (드라이브 로딩이 되어서 DB연결하는 메서드 호출)
    ...
    
        // 3. PreparedStatement만들기(sql) insert쿼리문을 문자열로
	String sql = "INSERT INTO emp(empno, ename, sal, deptno) values(?,?,?,?)";
	
	// PreparedStatement객체는 conn안에있는 prepareStatement 메서드를 통해서 만들기
	// values 값이 정해지지 않았기 때문에 값을 세팅해준다. 
	
	PreparedStatement pstmt = conn.prepareStatement(sql);
	pstmt.setInt(1, empno);
	pstmt.setString(2, ename);
	pstmt.setInt(3, sal);
	pstmt.setInt(4, deptno);
 %>

 

4-4. 실행

쿼리문을 실행해 추가된 레코드의 수를 반환한다.

exceuteUpdate( )를 사용해 업데이트의 값이 있는지 확인한다. 

- insert, delete, update -> executeUpdate() -> int(정수형 데이터) 리턴 
- select -> executeQuery() -> ResultSet 객체 리턴

cnt 변수를 만들어서 cnt에 1이 있으면 DB에 레코드 추가 cnt에 0이 있으면 DB에 레코드 추가 실패
response 기본 객체의 sendRedireact메서드
웹 서버가 웹 브라우저에게 다른 페이지로 이동하라고 지시하는 것
response.sendRedirect(location)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.PreparedStatement"%>
<%!
	// 선언부에 드라이브를 로딩하는 것과 DB를 연결하는 메서드 생성
        // 드라이브 로딩과 DB연결
%>
<%
	//  한글 인코딩 

	//1. 폼의 데이터를 서버로 가져오기 
	...
	// 2. DB 연결 (드라이브 로딩이 되어서 DB연결하는 메서드 호출)
    ...
    
        // 3. PreparedStatement만들기(sql) insert쿼리문을 문자열로
	...
    
    	// 4.실행 
	int cnt = pstmt.executeUpdate();
	
	// 결과에 따라 페이지 이동. 
	if(cnt>0) {  // 사원등록성공
		// 추가되었으니 다시 홈페이지로 이동       //webSJP/index.jsp
		response.sendRedirect(request.getContextPath()+"/index.jsp");
	}else{  // 사원등록실패
		response.sendRedirect("webJSP/J02-_response_jdbc/empFormOk.jsp");
	}
    
 %>

 

4-5. DB닫기

 PreparedStatement 객체 Close, Connection 객체 Close
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.PreparedStatement"%>
<%!
	// 선언부에 드라이브를 로딩하는 것과 DB를 연결하는 메서드 생성
        // 드라이브 로딩과 DB연결
%>
<%
	//  한글 인코딩 

	//1. 폼의 데이터를 서버로 가져오기 
	...
	// 2. DB 연결 (드라이브 로딩이 되어서 DB연결하는 메서드 호출)
    ...
    
        // 3. PreparedStatement만들기(sql) insert쿼리문을 문자열로
	...
    
    	// 4.실행 
	...
    
    	// 5. DB닫기
	pstmt.close();
	conn.close();
 %>

5. 결과

 

성공하게 되면 index.jsp 파일이 열린다.

 

DB에 가서 데이터가 제대로 들어갔는지 조회하기 (SELECT * FROM emp)

 

전체코드

더보기
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@page import="java.sql.PreparedStatement" %>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.DriverManager"%>
<%!
	// 선언부에 드라이브를 로딩하는 것과 DB를 연결하는 메서드 생성
	public Connection getConnection(){
		Connection con = null;
		try{              // Driver.class가 있는 파일의 경로
			Class.forName("com.mysql.cj.jdbc.Driver");  
												// 서버IP주소,DB명,계정,비밀번호		
			con = DriverManager.getConnection("jdbc:mysql://127.0.0.1/demo","root","root1106");
		}catch(Exception e){
			System.out.println("DB연결 에러 발생...");
			e.printStackTrace();
		}
		return con;
	}
%>
<%
	// 이름이 있기 때문에 한글 인코딩 먼저
	request.setCharacterEncoding("utf-8");

	// 1. 데이터 가져오기
	int empno = Integer.parseInt(request.getParameter("empno"));
	String ename = request.getParameter("ename");
	int sal = Integer.parseInt(request.getParameter("sal"));
	int deptno = Integer.parseInt(request.getParameter("deptno"));

	// 2. 드라이브 로딩과 DB연결
	Connection conn = getConnection();
	
	// 3. 쿼리문 세팅
	String sql = "insert into emp(empno, ename, sal, deptno) values(?,?,?,?)";

	PreparedStatement pstmt = conn.prepareStatement(sql);
	pstmt.setInt(1, empno);
	pstmt.setString(2, ename);
	pstmt.setInt(3, sal);
	pstmt.setInt(4, deptno);
	
	// 4.실행 
	int cnt = pstmt.executeUpdate();
	// 결과에 따라 페이지 이동
	if(cnt>0) {  // 사원등록성공
		// 추가되었으니 다시 홈페이지로 이동	            //webSJP/index.jsp
		response.sendRedirect(request.getContextPath()+"/index.jsp");
	}else{   // 사원등록실패
		response.sendRedirect("webJSP/J02_response_jdbc/empFormOk.jsp");
	}
	
	// 5. DB닫기
	pstmt.close();
	conn.close();
%>