20220727_wed
어제만든 MYDB 파일에서 시작
데이터 삽입,삭제 연습용 테이블 생성해보기
CREATE TABLE TEST_STUDENT(
STU_NUM NUMBER PRIMARY KEY--무결성 제약조건
, STU_NAME VARCHAR2(100)
, STU_AGE NUMBER
, STU_ADDR VARCHAR2(100)
);
//결과
Table TEST_STUDENT이(가) 생성되었습니다.
NUMBER: 자료형.자바와 다르게 자료형이 뒤에 있다.
VARCHAR2 : 문자(문자열X)
기본키(PRIMARY KEY): 유일하게 하나만 있는 값(중복X), NULL값도 X
EX) 학생의 학번, 연락처..
->테이블 새로고침시 방금 만든 TEST_STUDENT 파일 생성됨.
*테이블 전체 조회하기.
SELECT * FROM TEST_STUDENT;
*데이터 삽입(INSERT)
-문법 : INSERT INTO 테이블명(컬럼명...) VALUES (값...);
INSERT INTO TEST_STUDENT (STU_NUM, STU_NAME, STU_AGE, STU_ADDR)
VALUES (1, '김자바', 20, '울산시');
INSERT INTO TEST_STUDENT (STU_NUM, STU_NAME, STU_AGE, STU_ADDR)
VALUES (2, '이자바', 30, '서울시');
//1 행 이(가) 삽입되었습니다.
//결과
1 김자바 20 울산시
2 이자바 30 서울시
*기본키가 중복이 된다면?
INSERT INTO TEST_STUDENT (STU_NUM, STU_NAME, STU_AGE, STU_ADDR)
VALUES (1, '김자바', 20, '울산시');
INSERT INTO TEST_STUDENT (STU_NUM, STU_NAME, STU_AGE, STU_ADDR)
VALUES (1, '이자바', 30, '서울시');
//결과
오류 보고 -
ORA-00001: 무결성 제약 조건(MYDB.SYS_C007305)에 위배됩니다
INSERT INTO TEST_STUDENT (STU_NUM,STU_AGE)
VALUES (3,40);
1 김자바 20 울산시
2 이자바 30 서울시
3 (NULL) 40 (NULL)
ROLLBACK; //취소하기 F12
COMMIT; //저장하기 F11
*데이터 삭제(DELETE)
문법 : DELETE 테이블명 WHERE 조건;
DELETE TEST_STUDENT;
//3개 행 이(가) 삭제되었습니다.
->테이블 틀은 남고 데이터 내용만 삭제된다.
그렇다면, 테이블 틀 자체를 없애는 방법은?
DROP TABLE TEST_STUDENT; //그냥 끝
--학번이 1인 학생을 삭제하는 퀴리문 작성
DELETE TEST_STUDENT
WHERE STU_NUM = 1;
INSERT INTO TEST_STUDENT VALUES(4,'김인천',77,'인천광역시');
INSERT INTO TEST_STUDENT VALUES(5,'김자바',50,'울산시');
INSERT INTO TEST_STUDENT VALUES(6,'김김자바',10,'동울산시');
INSERT INTO TEST_STUDENT VALUES(7,'김중자바',50,'서울산시');
INSERT INTO TEST_STUDENT VALUES(8,'김대자바',80,'남울산시');
INSERT INTO TEST_STUDENT VALUES(9,'김아자바',55,'북울산시');
//결과
*데이터 수정(UPDATE)
예시_ 학번이 5번인 학생의 이름은 '임꺽정' 나이는 10 변경하라
UPDATE TEST_STUDENT
SET
STU_NAME = '임꺽정'
,STU_AGE = 10;
->조건 안주면 모든 데이터의 이름이 '임꺽정',나이는 '10'으로만 변경된다.!!!
*조건을 주고 데이터 수정하기
UPDATE TEST_STUDENT
SET
STU_NAME = '임꺽정'
, STU_AGE = 10
WHERE STU_NUM = 5;
//결과
2 이자바 30 서울시
5 임꺽정 10 울산시
6 김김자바 10 동울산시
7 김중자바 50 서울산시
8 김대자바 80 남울산시
9 김아자바 55 북울산시
4 김인천 77 인천광역시
cf)
var :사용할 변수
items :Collection객체(List, ArrayList)
프로젝트명: StudentManage1
먼저 파일 만들기
-index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
-student_list.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri= "http://java.sun.com/jsp/jstl/core" %>
<%
request. setCharacterEncoding("UTF-8");
response.setContentType("text.html;charset=UTF-8");
%>
no | 학생명 | 국어점수 | 영어점수 | 수학점수 | 평균 | 점수입력 | 삭제 |
데이터가 없습니다. | |||||||
1 | ${student.name } | 미입력 ${student.name} | 미입력 ${student.engScore } | 미입력 ${student.mathScore } | 미입력 ${student.avg } |
-StudentController.java (servlet)
package controller;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
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 dto.StudentDTO;
@WebServlet("*.st")
public class StudentController extends HttpServlet {
private static final long serialVersionUID = 1L;
//학생목록페이지를 저장할 수 있는 리스트 객체 생성
//StudentDTO(학생 한명)을 여러 명 저장할 수 있는 리스트(studentList) 공간을 만든다.
private List studentList = new ArrayList<>();//자동완성해야 오류x
public StudentController() {
super();
}
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("/studentList.st")) {
request.setAttribute("studentList", studentList);
page = "student_list.jsp";
}
//목록페이지의 학생등록버튼 누르면 학생정보 등록 페이지로 이동
else if(command.equals("/regStudentForm.st")) {
page = "reg_student_form.jsp";
}
//실제 학생등록 페이지
else if(command.equals("/regStudent.st")) {
String name = request.getParameter("name");
int age = Integer.parseInt(request.getParameter("age"));
String[] tells = request.getParameterValues("tell");
String addr = request.getParameter("addr");
String tell = tells[0] +"-"+ tells[1] +"-"+ tells[2];
StudentDTO student = new StudentDTO(name, addr, age, tell);
// 필요한 매개변수만을 이용해서 생성자 만들어 볼때,
//그러면 클래스 DTO로 가서 만들면 된다.
studentList.add(student);//방금 만든 학생을 리스트에 넣겠다.
page= "studentList.st";//다시 서블릿으로 온다.첫 목록페이지로 온다.
isRediect= true;//controller에서 다시 또 controller 올때는 이렇게 만든다.
}
//점수등록페이지로 이동
else if(command.equals("/regScoreForm.st")) {
//리스트페이지에서 값 던져줘야함.
//데이터 받기
request.setAttribute("name", request.getParameter("name"));//한줄로 한번에
page = "reg_score_form.jsp";
}
//점수등록 실제
else if(command.equals("/regScore.st")) {
String name =request.getParameter("name");
int korScore = Integer.parseInt(request.getParameter("korScore"));
int engScore = Integer.parseInt(request.getParameter("engScore"));
int mathScore = Integer.parseInt(request.getParameter("mathScore"));
for( StudentDTO student: studentList) {//학생리스트에서 하나씩 꺼내본다
if(student.getName().equals(name)) {//내가 찾은 학생으 이름이 내가 들고온 이름과 같다면
student.setKorScore(korScore);
student.setEngScore(engScore);
student.setMathScore(mathScore);
break;
}
}
page= "studentList.st";//다시 서블릿으로 온다.첫 목록페이지로 온다.controller로 다시 데이터를 가져오기때문에
isRediect= true;
}
//학생 삭제
else if(command.equals("/deleteStudent.st")) {
//리스트페이지에서 값 던져줘야함.
//데이터 받기
request.setAttribute("name", request.getParameter("name"));//한줄로 한번에
for(int i=0;i<studentList.size(); i++) {
if(studentList.get(i).getName().equals("name")) {
studentList.remove(i);
break;
}
}
page="studentList.st";
isRediect= true;
}
if(isRediect) {
response.sendRedirect(page);
}
else {
RequestDispatcher dispatcher = request.getRequestDispatcher(page);
dispatcher.forward(request, response);
}
}
}
-StudentDTO (Class)
package dto;
public class StudentDTO {
private String name;
private String addr;
private int age;
private String tell;//배열도 가능하지만 더 편하기 때문
private int korScore;
private int engScore;
private int mathScore;
private double avg;//실수
//생성자는 필요할 때마다 만든다. 필요에 맞게 맞춰서
public StudentDTO(String name, String addr, int age, String tell) {
super();
this.name = name;
this.addr = addr;
this.age = age;
this.tell = tell;
}
//getter setter
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getTell() {
return tell;
}
public void setTell(String tell) {
this.tell = tell;
}
public int getKorScore() {
return korScore;
}
public void setKorScore(int korScore) {
this.korScore = korScore;
}
public int getEngScore() {
return engScore;
}
public void setEngScore(int engScore) {
this.engScore = engScore;
}
public int getMathScore() {
return mathScore;
}
public void setMathScore(int mathScore) {
this.mathScore = mathScore;
}
public double getAvg() {
avg= (korScore+engScore+mathScore)/3.0;
return avg;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
// public void setAvg() {// 평균은 set가 사실 필요가 없음. 그리고 받을 필요 x
// this.avg = (korScore+engScore+mathScore)/3.0;//국영수 입력한 값으로 평균구하기
// }
}
-reg_student_form.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request. setCharacterEncoding("UTF-8");
response.setContentType("text.html;charset=UTF-8");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="regStudent.st" method="post">
이름: <input type="text" name="name" required><br><!--필수입력 -->
나이: <input type="text" name="age"><br>
연락처:
<select name="tell">
<option value ="010">010</option>
<option value ="011">011</option>
<option value ="012">012</option>
</select>
<input type="text" name="tell"><br>
<input type="text" name="tell"><br>
<br>
주소:
<input type="text" name="addr"><br>
<input type="submit" value="기본정보 입력"><br>
</form>
</body>
</html>
-reg_score_form.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>
${name }학생의 성적을 입력합니다.<br>
<form action="regScore.st" method="post">
<input type="hidden" name="name" value="${name }">
국어<input type="text" name="korScore"><br>
영어<input type="text" name="engScore"><br>
수학<input type="text" name="mathScore"><br>
<input type="submit" value="점수등록">
</form>
</body>
</html>
lib 파일에 파일 4개 넣어두기.
![](https://velog.velcdn.com/images/ub997/post/8d0e12ba-afa4-438a-b5f8-777998d6a091/image.png)
-----
##DB와 JAVA 연결
1.서블릿 insert01에서 기본코드 입력하기
@WebServlet("/Insert01")
public class Insert01 extends HttpServlet {
private static final long serialVersionUID = 1L;
public Insert01() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//자바와 디비를 연결시켜주는 객체
Connection conn = null;
//실행할 쿼리문을 저장하는 문자열
String sql = "INSERT INTO TEST_STUDENT (STU_NUM, STU_NAME, STU_AGE, STU_ADDR) VALUES (101, '이순신', 20, '울산시')";
//쿼리문을 실행하는 객체
Statement stmt = null;
try {
//예외가 발생할 소지가 있는 코드
Context init = new InitialContext();
DataSource ds = (DataSource)init.lookup("java:comp/env/jdbc/OracleDB");
conn = ds.getConnection();
stmt = conn.createStatement();
stmt.executeUpdate(sql);
System.out.println("DB 작업 성공");
}catch(Exception e) {
//예외 발생 시 실행할 코드
System.out.println("DB 작업 실패");
//오류가 난 이유와 위치를 간략하게 출력
e.printStackTrace();
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
F11 누른 후,
//콘솔결과
DB 연결 성공
*DB 열고 미리 만든 SQL페이지에서 MYDB로 선택 후, 테이블전체 조회하면,
데이터 추가되어있음.
2.DB 페이지 들어가기
--테이블 전체 조회하기(ctrl+enter)
SELECT * FROM TEST_STUDENT; // ctrl +enter 누른 후
//결과(빈값은 (NULL)값)
3 40
2 이자바 30 서울시
5 임꺽정 10 울산시
6 김김자바 10 동울산시
7 김중자바 50 서울산시
8 김대자바 80 남울산시
9 김아자바 55 북울산시
4 김인천 77 인천광역시
101 이순신 20 울산시 << 변화된 값
예제_학번이 101인 학생의 이름(이순신)을 '유관순'으로 변경하라.
-insert03 servlet 파일만들고 코드 입력 후 DB코드로 작성하기.
String sql = "UPDATE TEST_STUDENT SET STU_NAME ='유관순' WHERE STU_NUM =101";
//띄어쓰기 유의! 마지막 ';'은 하나만!
//결과(빈값은 (NULL)값)
3 40
2 이자바 30 서울시
5 임꺽정 10 울산시
6 김김자바 10 동울산시
7 김중자바 50 서울산시
8 김대자바 80 남울산시
9 김아자바 55 북울산시
4 김인천 77 인천광역시
101 유관순 20 울산시 <<변화된 값.