20220804_THU
SELECT * FROM EMP;
SELECT * FROM DEPT;
--이 둘은 다른 테이블이지만 서로 연관되어있는 테이블이다.(공통점 DEPTNO 때문에)
--이 두개의 테이블을 한번에 조회하고 싶을 때?
<참고>
--객체명처럼 앞에 '테이블명.컬럼명' 사용하기
SELECT EMP.EMPNO, EMP.ENAME, EMP.DEPTNO
FROM EMP;
--테이블명 별칭은 'AS' 사용 안한다! 그래서 바로 컬럼명 적용
SELECT E.EMPNO, E.ENAME, E.DEPTNO
FROM EMP E;
--각각의 테이블의 컬럼명 모두를 앞뒤로 한번에 적고 조회
--중복된컬럼명 앞에 테이블명 입력해주기.
--조인(JOIN)_쿼리문
SELECT EMPNO,ENAME, EMP.DEPTNO, DEPT.DEPTNO,DNAME,LOC
FROM EMP,DEPT
ORDER BY EMPNO;
--문제점발생: 사원1명당 4개의 여러 부서행 발생-> 14 * 4= 56행 조회
--해결방법: 조건절에 두개의 테이블 중 공통점 DEPTNO가 같다는 조건절
SELECT EMPNO,ENAME, EMP.DEPTNO, DEPT.DEPTNO,DNAME,LOC
FROM EMP,DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
ORDER BY EMPNO;
--예제)이문세 사원(EMP)이 속해있는 부서명(DEPT)을 조회해주세요.
SELECT DNAME
FROM EMP,DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO AND ENAME='이문세';
--예제)경리부에서 근무하는 사원의 이름,입사일 조회하라.
SELECT ENAME,TO_CHAR(HIREDATE,'YYYY-MM-DD')
FROM EMP,DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
AND DNAME='경리부';
1.컨트롤러
package controller;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("*.do")
public class SessionController extends HttpServlet {
private static final long serialVersionUID = 1L;
public SessionController() {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doProcess(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doProcess(request, response);
}
protected void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//한글 인코딩 처리
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
String requestURI = request.getRequestURI();
String contextPath = request.getContextPath();
String command = requestURI.substring(contextPath.length());
System.out.println("command = " + command);
String page = "";//계속 바뀌면 초기값 빈값준다.
boolean isRediect = false;
//첫 페이지로 이동
if(command.equals("/first.do")) {
//데이터넘겨주는 방식: 'request' 평소 우리가 사용
request.setAttribute("age", 20);
// 문제점: 데이터 넘겨줄때마다 반복적으로 넣어줘야하기 때문 중복 반복된다.다음데이터넘겨줄때 연결x 1회용..
// 서버라는 세션영역에 한 번 저장하면 어디든 들고 데이터 넘겨줄수있는 방식
//[순서]
//1번.세션객체 생성
//2번.세션에 데이터 등록
//3번.세션 만료 시간 설정(ex.은행업무 로그인 완료시간)
//1번
HttpSession session = request.getSession();
//2번
session.setAttribute("age", 30);//평소 데이터 넘겨주는 방식에서 request > session으로 대체
//3번: 안적으면 기본값 30분
session.setMaxInactiveInterval(5);//(단위 : 초)
//두번째 페이지로 이동하고 5초뒤 새로고침하면 age값이 사라진다.
//의문점: age 두번사용되었는데 중복아닌가?
//아니다. 왜냐면 request(페이지이동시마다 사용하는 작은 소쿠리)와 session(전체 페이지 데이터담는 큰 소쿠리)은 서로 독립된 다른 바구니이기때문에 중복x
//세션은 페이지가 끝내기까지가 아니라 인터넷브라우저가 완전히 꺼질때까지 데이터를 저장시킨다!!!
page="first.jsp";
}
//두번째 페이지로 이동
else if(command.equals("/second.do")) {
page="second.jsp";
}
//세번째 페이지로 이동
else if(command.equals("/third.do")) {
page="third.jsp";
}
if(isRediect) {
response.sendRedirect(page);//페이지이동할때 알아서 자동으로 템플릿으로 간다.
}
else {
RequestDispatcher dispatcher = request.getRequestDispatcher(page);
dispatcher.forward(request, response);
}
}
}
2.인덱스 jsp
<%@ 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>
<jsp:forward page="first.do"></jsp:forward>
</body>
</html>
<%@ 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>
<h3>first 페이지입니다.</h3>
<a href="second.do">두번째 페이지로 이동</a><br>
${age}<br><!-- request 바구니에 담긴 age 값 -->
${sessionScope.age }<!-- session 바구니에 담긴 age 값 -->
</body>
</html>
<%@ 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>
<h3>second 페이지입니다.</h3>
<a href="third.do">세번째 페이지로 이동</a><br>
${sessionScope.age }
</body>
</html>
<%@ 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>
<h3>third 페이지입니다.</h3>
${sessionScope.age }
</body>
</html>
게시글 리스트 : 글번호 제목 작성자 작성이 조회수