본문 바로가기
Database/Oracle

Spring Frame work CRUD -Oracle DB(employee)

by tangle96 2021. 7. 5.

Spring Frame work CRUD /0702 (금) updating ~

1. 목적

Oracle , mysql db를 활용해 employee table 값으로 JSP를 통해 spring frame work jdbd 구성

2. 원하는 결과

2-1. Start.jsp

이 이후로 모든 JSP는 화면에 보여지는 출력이라고 생각하겠다.

 

Front - jsp / back - java

 

java DAO을 통해 DB 연결과 Client와 Server간에 송수신 역할은 DAO process가 맡을 것이다.

 

임의로 Index 페이지로 하겠다.

 

첫 화면을 통해 JSP와 DB를 연결했다는 포인트를 알 수 있다.

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="insertFormEmp.jsp">사원 등록</a>
<a href= "selectEmp.jsp">사원 목록 보기</a>
</body>
</html>

 

2-2.SelectEmp.jsp 사원 목록 보기 jsp 페이지

<SelectEmp.jsp>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import ='java.util.*' %>
<%@ page import ='sample.*' %>
<%
	EmpDAO dao = EmpDAO.getInstance();
	List<EmpVO> list = dao.selectEmp();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>사원 목록 보기</title>
</head>
<body>
	<table border='2'>
		<tr><td>사번</td>
		<td>사원명</td>
		<td>매니저</td>
		<td>업무</td>
		</tr>
		<% for(EmpVO vo : list) {%>
			<tr>
			<td> <%= vo.getEno() %></td>
			<td><a href='viewEmp.jsp?eno=<%= vo.getEno() %>'>
				 <%= vo.getEname() %></a>
				 </td>
			<td> <%= vo.getManager() %></td>
			<td> <%= vo.getJob() %></td>
			
			</tr>
		<% } //end of for %>
	</table>
</body>
</html>

 

 

<EmpDAO.java>

package sample;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;

public class EmpDAO {

	// DB 연결 관련 변수 선언
	String driverName = "oracle.jdbc.driver.OracleDriver";
	String url = "jdbc:oracle:thin:@localhost:1521:xe";
	String user = "";
	String pass = "";

	// 싱글톤 패턴
	private EmpDAO() throws Exception {
		// 1. 드라이버 로딩
		Class.forName(driverName);
		System.out.println("생성자 한번");
	}

	static EmpDAO dao = null;

	// 멤버변수는기본적으로 null값 초기화 됨 그래도 null값 쓰는거 권장
	// static은 static 끼리만 놀기 때문에 변수도, getInstance 메소드도 static으로 선언
	public static EmpDAO getInstance() throws Exception {
		if (dao == null)
			dao = new EmpDAO();
		return dao;
	} // 첫번쨰 들어올떈 dao 가 null값이라 실행됨 근데 그 다음부턴 dao가 null이 아니라 객체생성을 안하고
		// return 값으로 반환만 해줌

	public ArrayList<EmpVO> selectEmp() throws Exception {
		Connection con = null;
		PreparedStatement ps = null;
		try {
			// 2. 연결객체 얻어오기
			con = DriverManager.getConnection(url, user, pass);
			// 3. sql 문장 만들기
			String sql = "SELECT * FROM employee";
			// 4. 전송객체 얻어오기
			ps = con.prepareStatement(sql);
			// 5. 전송 ( executeUpdate() / executeQuery() )
			ResultSet rs = ps.executeQuery();
			ArrayList<EmpVO> list = new ArrayList<EmpVO>();
			while (rs.next()) {
				EmpVO vo = new EmpVO();
				vo.setEno(rs.getInt("ENO"));
				vo.setEname(rs.getString("ENAME"));
				vo.setManager(rs.getInt("MANAGER"));
				vo.setJob(rs.getString("JOB"));
				list.add(vo);
			}
			return list;
		} finally {
			// 6. 닫기
			ps.close();
			con.close();
		}
	}

 

 

2-3.사원등록(insertFormemp.jsp ,saveEmp.jsp)

사원은 누가 등록하는가? 사용자가 입력할 것이다

 

Client의 입장과 환경에서 입력받을 jsp 화면을 구성한다.

 

우리는 입력을 받을 것이고, 주체자인 나는 서버에서 작업을 구현하여 다시 뿌려줄 것이다.

 

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>사원 등록화면</title>
</head>
<body>
	<form method="post" action="saveEmp.jsp">
		<table border='1'>
			<tr>
				<td>사번</td>
				<td><input type="text" id="eno" name="eno"></td>
			</tr>
			<tr>
				<td>이름</td>
				<td><input type="text" id="ename" name="ename"></td>
			</tr>
			<tr>
				<td>월급</td>
				<td><input type="text" id="salary" name="salary"></td>
			</tr>
			<tr>
				<td>업무</td>
				<td><input type="text" id="job" name="job"></td>
			</tr>
			<tr>
				<td colspan="2" align="center">
				<input type="submit" class="button" value="확인">
				<input type="reset" value="취소"></td>
			</tr>
		</table>
	</form>

</body>
</html>

간단하게 form으로 구성했다.

확인 버튼을 누르면 submit으로 saveEmp.jsp로 정보가 넘어간다

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ page import="sample.*"%>
<% 	//사번 뿐안 아니라 사원명/월급/직업
	request.setCharacterEncoding("UTF-8"); //한글
	//1. 이전 화면에서 사옹자 입력값을 얻어오기
	String eno = request.getParameter("eno"); //insert form에서 받아온 파라미터 값을 String eno 변수에 저장
	String ename = request.getParameter("ename");
	String salary = request.getParameter("salary");
	String job = request.getParameter("job");
	
	//2. 입력값을 VO객체에 변수로 지정
	EmpVO vo = new EmpVO();
	vo.setEno(Integer.parseInt(eno)); //위에 String으로 선언해서 seteno가 오류가 나지만 Integer.parseInt로 형변환
	vo.setEname(ename);
	vo.setSalary(Integer.parseInt(salary)); 
	vo.setJob(job);
	
	//3. DAO insert함수를 호출
	EmpDAO dao = EmpDAO.getInstance();
	dao.insertEmp(vo);
	
	response.sendRedirect("selectEmp.jsp"); //서버에서 클라이언트로 이 jsp 파일을 뿌려줄거임(클라이언트(사용자)가 볼 화면)
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>입력되었습니다.
</body>
</html>

 

dao.insertEmp(vo);의 함수가 있는 EmpDAO.java의 내용은 다음과 같다.

public void insertEmp(EmpVO vo) throws Exception {
		Connection conn = null;
		PreparedStatement pstmt = null;
		
		try {
			//2.연결 객체 얻어오기
			conn = DriverManager.getConnection(url, user, pass);
			
			//3.sql 문장 만들기
			String sql = "INSERT INTO employee(eno,ename,salary,job)" + "VALUES(?,?,?,?)";
			
			//4.전송 객체 얻어오기
			pstmt = conn.prepareStatement(sql);
			pstmt.setInt(1,  vo.getEno());
			pstmt.setString(2,  vo.getEname());
			pstmt.setInt(3,  vo.getSalary());
			pstmt.setString(4,  vo.getJob());
			
			//5.전송
			pstmt.executeUpdate();
			
			
		} finally {
			//6.닫기
			pstmt.close();
			conn.close();
		}
	}

 

selectEmp.jsp로 이동되며 정상적으로 DB에 입력이 되었다.

 

2-4.viewEmp.jsp

이제 Ename부분의 이름을 하이퍼링크로 처리해서 클릭하면 ViewEmp.jsp로 이동해

해당 ename의 정보를 쭉 나타내려고한다. (salary,manager 등등..)

 

SMITH 클릭시 viewEmp.jsp 화면엔 이렇게 나타나야한다.

 

목록을 보여주던 selectEmp.jsp에는 이미 하이퍼링크로 ename이지만 ViewEmp.jsp?eno= 를 통해

vo.getEno()값을 넘겨주는것을 볼 수 있다.

 

즉 Ename을 클릭하면 해당하는 eno 값이 viewEmp에 넘어가는 것이며

 

viewEmp.jsp는 다음과 같이 처리한다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import = "sample.*" %> <!--EmpDAO.getInstance()함수 쓰기 위한 임포트 -->
<%
	//이전 화면에서 넘겨주는(파라메터) 값을 받기
	String eno = request.getParameter("eno");
	
	// DAO에 viewEmp() 호출
	EmpDAO dao = EmpDAO.getInstance();
	EmpVO vo = dao.viewEmp(eno);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- VIEW EMP.JSP 입니다 Ename을 클릭하면 그 Ename에 해당하는 사원의 모든 정보를 DAO viewEmp를 호출하여 화면에 출력 -->
<form>
		<table border='1'>
			<tr>
				<td>사번</td>
				<td><%= vo.getEno() %></td>
			</tr>
			<tr>
				<td>사원명</td>
				<td><%= vo.getEname() %></td>
			</tr>
			<tr>
				<td>직업</td>
				<td><%= vo.getJob() %></td>
			</tr>
			<tr>
				<td>업무</td>
				<td><%= vo.getManager() %></td>
			</tr>
			<tr>
				<td>입사일</td>
				<td><%= vo.getHiredate() %></td>
			</tr>
			<tr>
				<td>연봉</td>
				<td><%= vo.getSalary() %></td>
			</tr>
			<tr>
				<td>커미션</td>
				<td> <%= vo.getCommission() %></td>
			</tr>
			<tr>
				<td>부서</td>
				<td><%= vo.getDno() %></td>
			</tr>
			<tr>
				<td colspan="3" align="center">
				<a href= "selectEmp.jsp">
				<input type="button" class="button" value="목록"></a>
				
				<a href ='deleteEmp.jsp?eno=<%= vo.getEno() %>'>
				<input type="button" class="delete" value="삭제"></a>
				
				<a href ='modifyFormEmp.jsp?eno=<%= vo.getEno() %>'>
				<input type="button" class="delete" value="수정"></a>
				<!-- 삭제할건데 뭘 삭제해? eno= -> 파라미터값 받아와서
				근데 어떤 파라미터? vo.getEno()값. 
				where 절과 delete 절 작성할때 where절이 없으면 한번 더 고민해보자 -->
				</td>
			</tr>
		</table>
	</form>


</body>
</html>

넘어온 eno값을 getParameter로 받고 String eno에 저장한다

 

그 넘어온 eno값을 통해 어떻게 보여줄 것인지 empDAO에 함수로 처리한다.

 

// 사원 정보 표시 함수
	public EmpVO viewEmp(String eno) throws Exception {
		Connection conn = null;
		PreparedStatement pstmt = null;
		try {
			// 2. 연결객체 얻어오기
			conn = DriverManager.getConnection(url, user, pass);
			// 3. sql 문장 만들기
			String sql = "SELECT * FROM employee WHERE eno=?";

			// 4.전송 객체 얻어오기
			pstmt = conn.prepareStatement(sql);
			pstmt.setInt(1, Integer.parseInt(eno)); // 물음표를 채워주는 과정 //프로그램 아닌애는 1부터 인덱스 시작

			// 5.전송하기
			ResultSet rs = pstmt.executeQuery();
			
			// 6.결과처리
			EmpVO vo = new EmpVO();
			if (rs.next()) {
				vo.setEno(rs.getInt("ENO"));
				vo.setEname(rs.getString("ENAME"));
				vo.setJob(rs.getString("JOB"));
				vo.setManager(rs.getInt("MANAGER"));
				vo.setHiredate(rs.getString("HIREDATE"));
				vo.setSalary(rs.getInt("SALARY"));
				vo.setCommission(rs.getInt("COMMISSION"));
				vo.setDno(rs.getInt("DNO"));
			}
			return vo;

		} finally {

			// 7. 닫기
			pstmt.close();
			conn.close();
		}

	}

 

'Database > Oracle' 카테고리의 다른 글

[Oracle] 8.서브쿼리  (0) 2021.06.23
[Oracle] 7.Oracle 문제 풀이 정리  (0) 2021.06.23
[Oracle] 6. 다양한 함수  (0) 2021.06.07
[Oracle] 5.Order by  (0) 2021.06.07
[Oracle] 4.Group by / Having  (0) 2021.06.04

댓글