티스토리 뷰
1. 게시판 삭제를 구현하시오.
BDao.java에 아래 함수를 추가한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
public void delete(String bid) {
System.out.println("delete");
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));
// valueOf도 사용 가능
//executeUpdate 함수를 사용하는 방법입니다.
// -> INSERT / DELETE / UPDATE 관련 구문에서는 반영된 레코드의 건수를 반환합니다.
// -> CREATE / DROP 관련 구문에서는 -1 을 반환합니다.
int rn = preparedStatement.executeUpdate();
System.out.println("삭제 갯수: " + rn);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(preparedStatement != null)
preparedStatement.close();
if(connection != null)
connection.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
|
cs |
BController.java의 actionDo 함수의 if~else문에 아래 코드를 추가한다.
1
2
3
4
5
|
else if(com.equals("/delete.do")) {
command = new BDeleteCommand();
command.execute(request, response);
viewPage = "list.do";
}
|
cs |
BDeleteCommand.java를 생성한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
package edu.kosmo.ex.command;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import edu.kosmo.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);
}
}
|
cs |
2. 데이터 무결성을 위한 제약 조건 4가지는?
- 테이블에 부적절한 자료가 입력되는 것을 방지하기 위해 테이블을 생성할 때, 각 컬럼에 대해서 정의하는 여러 가지 규칙이다.
- 무결성 : 데이터베이스 내에 있는 데이터의 정확성 유지
- 제약 조건 : 바람직하지 않은 데이터가 저장되는 것을 방지하는 것
제약 조건은 총 5가지이지만 수업은 일단 4가지만...
무결성 제약 조건 | 역할 |
NOT NULL | NULL을 허용하지 않음 |
UNIQUE | 중복된 값을 허용하지 않고, 항상 유일한 값을 갖도록 함 |
PRIMARY KEY | NULL을 허용하지 않고, 중복된 값도 허용하지 않음. (NOT NULL + UNIQUE) |
FOREIGN KEY | 참조되는 테이블의 컬럼의 값이 존재하면 허용 |
CHECH | 저장 가능한 데이터 값이 범위나 조건을 지정하여, 설정한 값만을 허용 |
3. 커밋과 롤백에 대하여 설명하시오.
COMMIT
- 모든 작업을 정상적으로 처리하겠다고 확정하는 명령어.
- 트랜젝션의 처리 과정을 데이터베이스에 반영하기 위해서, 변경된 내용을 모두 영구 저장한다.
- COMMIT 수행하면, 하나의 트랜젝션 과정을 종료하게 된다.
- TRANSACTION(INSERT, UPDATE, DELETE)작업 내용을 실제 DB에 저장한다.
- 이전 데이터가 완전히 UPDATE된다.
- 모든 사용자가 변경한 데이터의 결과를 볼 수 있다.
- 따라서 COMMIT을 하지 않으면 이전 작업 내용이 아직 남아있다.
- COMMIT을 하면 ROLLBACK 불가.
- DDL문 CREATE, ALTER, DROP, RENAME, TRUNCATE등은 자동으로 COMMIT을 실행.
ROLLBACK
- 작업 중 문제가 발생했을 때, 트랜젝션의 처리 과정에서 발생한 변경 사항을 취소하고, 트랜젝션 과정을 종료시킨다.
- 트랜젝션으로 인한 하나의 묶음 처리가 시작되기 이전의 상태로 되돌린다.
- TRANSACTION(INSERT, UPDATE, DELETE)작업 내용을 취소한다.
- 이전 COMMIT한 곳까지만 복구한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
-- delete 명령어
-- 테이블에 저장되어 있는 데이터를 삭제하는 명령문이다.
DROP TABLE DEPT01;
CREATE TABLE DEPT01 AS SELECT * FROM DEPT;
COMMIT;
SELECT * FROM dept01;
-- dept01 부서 테이블의 모든 데이터를 삭제
DELETE FROM dept01;
-- 30번 부서를 삭제한 후 부서 테이블을 확인
DELETE FROM dept01 WHERE deptno = 30;
-- 서브 쿼리를 이용하여 데이터 삭제하기
DROP TABLE EMP01;
CREATE TABLE EMP01 AS SELECT * FROM EMP;
COMMIT;
SELECT * FROM emp01;
-- 서브 쿼리문으로 부서명이 sales인 부서의 번호부터 알아낸 뒤
-- sales 부서 소속의 사원을 삭제하는 쿼리문
DELETE FROM emp01 WHERE deptno = (SELECT deptno FROM dept WHERE dname = 'SALES');
-- commit rollback;
-- 모든 작업을 정상적으로 처리하겠다고 확정하는 명령어이다.
-- 트랜젝션의 처리 과정을 데이터베이스에 반영하기 위해서
-- 변경된 내용을 모두 영구 저장한다.
-- commit을 하기 전까지는 이전 작업내용이 아직 남아있다.....
-- 따라서 insert, update, delete 후에는 반드시 commit을 해야한다!
-- rollback은 이전 상태로 되돌리기
ROLLBACK;
-- drop은 rollback이 되지 않는다...주의!
-- 또한 commit을 완료한 경우에도 rollback이 되지 않는다.
-- delete의 경우 commit할 때 주의...
-- DDL문 CREATE, ALTER, DROP, RENAME, TRUNCATE등은 자동으로 COMMIT을 실행
-- 데이터 무결성 = 데이터 정확성?
-- 데이터 무결성 -> 일단 제약 조건이 뭐가 있는지 외우기...이해는 오래 걸린다...
-- UNIQUE 제약 조건
-- 부서 번호와 같이이 기본키 제약조건이 설정된 컬럼은 테이블내에 저장되어 있는
-- 부서 번호있지를 확인한 후, 기존에 저장되어 있는 번호가 아닌 경우에만 저장이 가능하다.
INSERT INTO dept01 VALUES (50, 'TEST', 'SEOUL');
SELECT * FROM dept01;
-- NOT NULL
DROP TABLE emp01;
CREATE TABLE emp01(
empno NUMBER(4) NOT NULL,
ename VARCHAR2(10) NOT NULL,
job VARCHAR2(9),
deptno NUMBER(2)
);
commit;
INSERT INTO emp01(empno, ename, job, deptno) VALUES (NULL, NULL, 'SALESMAN', 30);
-- 집어넣는 것 불가
INSERT INTO emp01(empno, ename, job, deptno) VALUES (1, '집에가자', 'SALESMAN', 30);
SELECT * FROM emp01;
|
cs |
69번
jsp_board_test1 프로젝트를 생성하고, 아래의 객체를 완성하여 list.jsp 를 완성하시오.
- DTO
- DAO
- Controller
- Command
'수업문제' 카테고리의 다른 글
[문제] 12월 09일 (게시판 템플릿 적용하기) (0) | 2021.12.09 |
---|---|
[문제] 12월 08일 (Foreign key, 게시판 쿼리문, 설계도 to do list) (0) | 2021.12.08 |
[문제] 12월 06일(게시판 만들기, DML, DCL, DDL, 데이타 딕션러리, context.xml) (0) | 2021.12.07 |
[문제] 12월 02일 (EL, JSTL, Scope 영역, JOIN) (0) | 2021.12.02 |
- Total
- Today
- Yesterday
- exception
- equals
- Session
- JSP
- compareTo
- 채팅
- 제네릭
- Generic
- Request
- hashset
- toString
- 래퍼 클래스
- 부트스트랩
- object
- response
- 입출력
- TreeSet
- Servlet
- 예외처리
- 참조형
- 쓰레드
- el
- SOCKET
- abstract
- 쿠키
- 프로토콜
- string
- 진척도 70번
- 사칙연산 계산기
- 세션
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |