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 |
댓글