1. 게시판 삭제와 업데이트(수정)를 구현하시오.

1-1-1. Controller 객체 (매핑 구현부만 표시)

...
if (com.equals("/delete.do")) { 
	command = new BListCommand();		
	command.execute(request, response);	
	viewPage = "list.do"; // 삭제가 완료되면 list페이지로 이동한다.
} else if(com.equals("/modify.do")) {
	command = new BModifyCommand();
	command.execute(request, response);
	viewPage = "list.do"; // 수정이 완료되면 list페이지로 이동한다.
}
...

 

1-1-2. 삭제 Command 객체

package edu.bit.ex.command;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import edu.bit.ex.dao.BDao;

public class BDeleteCommand implements BCommand {

	@Override
	public void execute(HttpServletRequest request, HttpServletResponse response) {
		String bId = request.getParameter("bId");
		BDao dao = new BDao();
		dao.delete(bId);
	}
}

 

1-1-3. 수정 Command 객체

package edu.bit.ex.command;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import edu.bit.ex.dao.BDao;

public class BModifyCommand implements BCommand {

	@Override
	public void execute(HttpServletRequest request, HttpServletResponse response) {
		String bId = request.getParameter("bId");
		String bName = request.getParameter("bName");
		String bTitle = request.getParameter("bTitle");
		String bContent = request.getParameter("bContent");
		
		BDao  dao = new BDao();
		dao.modify(bId, bName, bTitle, bContent);
	}
}

 

1-1-4. DAO 객체 (삭제랑 업데이트 구현부만 표시)

...
// 게시글을 삭제하여 DELETE하기
public void delete(String bId) {
	Connection connection = null;
	PreparedStatement preparedStatement = null;

	try {
		connection = dataSource.getConnection();

		String query = "DELETE FROM mvc_board "
				+ "WHERE bId = ?"; // 해당 게시글 정보를 DELETE하기
		preparedStatement = connection.prepareStatement(query);
		preparedStatement.setInt(1, Integer.parseInt(bId));
			
		int rn = preparedStatement.executeUpdate();
		System.out.println("DELETE 결과: " + rn);
	} catch (Exception e) {
		e.printStackTrace();
	} finally {
		try {
			if(preparedStatement != null) preparedStatement.close();
			if(connection != null) connection.close();
		} catch (Exception e2) {
			e2.printStackTrace();
		}
	}
}
	
// 게시글을 수정하여 UPDATE하기
public void modify(String bId, String bName, String bTitle, String bContent) {
	Connection connection = null;
	PreparedStatement preparedStatement = null;

	try {
		connection = dataSource.getConnection();

		String query = "UPDATE mvc_board "
				+ "SET bName = ?, bTitle = ?, bContent = ? "
				+ "WHERE bId = ?"; // 해당 게시글 정보를 UPDATE하기
		preparedStatement = connection.prepareStatement(query);
		preparedStatement.setString(1, bName);
		preparedStatement.setString(2, bTitle);
		preparedStatement.setString(3, bContent);
		preparedStatement.setInt(4, Integer.parseInt(bId));
			
		int rn = preparedStatement.executeUpdate();
		System.out.println("UPDATE 결과: " + rn);
	} catch (Exception e) {
		e.printStackTrace();
	} finally {
		try {
			if(preparedStatement != null) preparedStatement.close();
			if(connection != null) connection.close();
		} catch (Exception e2) {
			e2.printStackTrace();
		}
	}
}
...

 

1-1-5. content_view 페이지

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
	<title>Insert title here</title>
</head>
<body>

   <table width="500" cellpadding="0" cellspacing="0" border="1">
      <form action="modify.do" method="post">
         <input type="hidden" name="bId" value="${content_view.bId}">
         <tr>
            <td> 번호 </td>
            <td> ${content_view.bId} </td>
         </tr>
         <tr>
            <td> 히트 </td>
            <td> ${content_view.bHit} </td>
         </tr>
         <tr>
            <td> 이름 </td>
            <td> <input type="text" name="bName" value="${content_view.bName}"></td>
         </tr>
         <tr>
            <td> 제목 </td>
            <td> <input type="text" name="bTitle" value="${content_view.bTitle}"></td>
         </tr>
         <tr>
            <td> 내용 </td>
            <td> <textarea rows="10" name="bContent" >${content_view.bContent}</textarea></td>
         </tr>
         <tr >
            <td colspan="2">
            	<input type="submit" value="수정"> &nbsp;&nbsp; 
	            	<a href="list.do">목록보기</a> &nbsp;&nbsp; 
	            	<a href="delete.do?bId=${content_view.bId}">삭제</a> &nbsp;&nbsp; 
	            	<a href="reply_view.do?bId=${content_view.bId}">답변</a>
         	</td>
         </tr>
      </form>
   </table>
</body>
</html>

 

1-2-1. 삭제 구현결과

 

1-2-2. 수정 구현결과

 

 

2. 아래를 sql 문으로 나타 내시오.

2-1. 부서테이블의 모든 데이터를 출력하라.

DESC dept;

 

2-2. EMP테이블에서 각 사원의 직업, 사원번호, 이름, 입사일을 출력하라.

SELECT job, empno, ename, hiredate
FROM emp;

 

2-3. EMP테이블에서 직업을 출력하되, 각 항목(ROW)가 중복되지 않게 출력하라.

SELECT DISTINCT job
FROM emp;

 

2-4. 급여가 2850 이상인 사원의 이름 및 급여를 표시하는 출력하라.

SELECT ename, sal
FROM emp
WHERE sal >= 2850;

 

2-5. 사원번호가 7566인 사원의 이름 및 부서번호를 표시하는 출력하라.

SELECT ename, empno
FROM emp
WHERE empno = 7566;

 

2-6. 급여가 1500이상 ~ 2850이하의 범위에 속하지 않는 모든 사원의 이름 및 급여를 출력하라.

SELECT ename, sal
FROM emp
WHERE sal NOT BETWEEN 1500 AND 2850;

 

2-7. 1981년 2월 20일 ~ 1981년 5월 1일에 입사한 사원의 이름,직업 및 입사일을 출력하라. 또한 입사일을 기준으로 해서 오름차순으로 정렬하라.

SELECT ename, job, hiredate
FROM emp
WHERE hiredate BETWEEN '1981-02-20' AND '1981-05-01'
ORDER BY hiredate ASC;

 

2-8. 10번 및 30번 부서에 속하는 모든 사원의 이름과 부서 번호를 출력하되, 이름을 알파벳순으로 정렬하여 출력하라.

SELECT ename, deptno
FROM emp
WHERE deptno IN (10, 30)
ORDER BY ename ASC;

 

2-9. 10번 및 30번 부서에 속하는 모든 사원 중 급여가 1500을 넘는 사원의 이름 및 급여를 출력하라. (단 컬럼명을 각각 employee 및 Monthly Salary로 지정하시오)

SELECT ename as 'employee', sal as 'Monthly_Salary'
FROM emp
WHERE sal > 1500 AND
	deptno IN (10, 30);

 

2-10. 관리자가 없는 모든 사원의 이름 및 직위를 출력하라.

SELECT ename, job
FROM emp
WHERE mgr IS null;

 

2-11. 커미션을 받는 모든 사원의 이름, 급여 및 커미션을 출력하되, 급여를 기준으로 내림차순으로 정렬하여 출력하라.

SELECT ename, sal, comm
FROM emp
WHERE comm IS NOT null
ORDER BY sal DESC;

 

2-12. 이름의 세 번째 문자가 A인 모든 사원의 이름을 출력하라.

SELECT ename
FROM emp
WHERE ename = '__A';

 

2-13. 이름에 L이 두 번 들어가며 부서 30에 속해있는 사원의 이름을 출력하라.

SELECT ename
FROM emp
WHERE ename = '%L%L%' AND
    deptno = 30;

 

2-14. 직업이 Clerk 또는 Analyst 이면서 급여가 1000,3000,5000 이 아닌 모든 사원의 이름, 직업 및 급여를 출력하라.

SELECT ename, job, sal
FROM emp
WHERE job IN ('CLERK', 'ANALYST') AND
	sal NOT IN (1000, 3000, 5000);

 

2-15. 사원번호, 이름, 급여 그리고 15%인상된 급여를 정수로 표시하되 컬럼명을 New Salary로 지정하여 출력하라.

SELECT empno, ename, sal, TRUNC((sal*1.15)) AS New_Salary
FROM emp;

 

2-16. 15번 문제와 동일한 데이타에서 급여 인상분(새 급여에서 이전 급여를 뺀 값)을 추가해서 출력하라.(컬럼명은 Increase로 하라).

SELECT empno, ename, sal, TRUNC((sal*1.15)-sal) AS Increase
FROM emp;

 

2-17. 모든 사원의 이름(첫 글자는 대문자로, 나머지 글자는 소문자로 표시) 및 이름 길이를 표시하는 쿼리를 작성하고 컬럼 별칭은 적당히 넣어서 출력하라.

SELECT INITCAP(ename) AS Ename, LENGTH(ename) AS 'Lename'
FROM emp;

 

2-18. 사원의 이름과 커미션을 출력하되, 커미션이 책정되지 않은 사원의 커미션은 ‘no commission’으로 출력하라.

SELECT ename, NVL(comm, 'No_Commission') AS Commission
FROM emp;

 

2-19. 모든 사원의 이름,부서번호,부서이름을 표시하는 질의를 작성하라.(DECODE)

SELECT ename, deptno, DECODE(deptno, 10, 'ACCOUNTING',
                            		20, 'RESEARCH',
                            		30, 'SALES',
                            		40, 'OPERATIONS') AS Dname
FROM emp;