JSP

JSP(Oracle_DB업로드)_2024

앵보몬 2024. 8. 28. 17:34
728x90
반응형

이 SQL 스크립트는 오라클 데이터베이스에서 새 사용자 계정을 생성하고, 해당 계정에 테이블과 시퀀스를 설정하는 과정을 포함하고 있습니다. 스크립트는 크게 두 부분으로 나누어져 있습니다. system 계정에서 실행할 부분과 musthave 계정에서 실행할 부분, 각 부분의 역할과 세부 사항은 다음과 같습니다.

system 계정에서 실행할 부분

① 사용자 계정 생성 및 권한 부여

-- 계정 생성에 필요한 설정
alter session set "_ORACLE_SCRIPT"=true;

-- 새 사용자 계정 생성
create user musthave identified by 1234;

-- 사용자에게 권한 부여
grant connect, resource to musthave;

 

② 테이블 스페이스 확인 및 권한 설정

-- 테이블 스페이스 조회
select tablespace_name, status, contents from dba_tablespaces;

-- 테이블 스페이스별 가용 공간 확인
select tablespace_name, sum(bytes), max(bytes) from dba_free_space
group by tablespace_name;

-- musthave 계정의 기본 테이블 스페이스 확인
select username, default_tablespace from dba_users
where username = upper('musthave');

-- 테이블 스페이스에 5MB 용량 할당
alter user musthave quota 5m on users;

 

musthave 계정에서 실행할 부분

① 기존 테이블 삭제 및 새 테이블 생성

-- 기존 테이블 및 시퀀스 삭제
drop table member;
drop table board;
drop sequence seq_board_num;

-- 회원 테이블 생성
create table member (
    id varchar2(10) not null,
    pass varchar2(10) not null,
    name varchar2(30) not null,
    regidate date default sysdate not null,
    primary key (id)
);

-- 게시판 테이블 생성
create table board (
    num number primary key,
    title varchar2(200) not null,
    content varchar2(2000) not null,
    id varchar2(10) not null,
    postdate date default sysdate not null,
    visitcount number(6)
);

-- 외래키 설정
alter table board
    add constraint board_mem_fk foreign key (id)
    references member (id);

-- 시퀀스 생성
create sequence seq_board_num
    increment by 1
    start with 1
    minvalue 1
    nomaxvalue
    nocycle
    nocache;

 

더미 데이터 입력

-- 더미 데이터 입력
insert into member (id, pass, name) values ('musthave', '1234', '머스트해브');
insert into board  (num, title, content, id, postdate, visitcount)
    values (seq_board_num.nextval, '제목1입니다', '내용1입니다', 'musthave', sysdate, 0);
commit;

 

참고사항

계정 생성 : alter session set "_ORACLE_SCRIPT"=true 명령어는 system 계정에서만 사용 가능한 특수한 설정으로, 새로운 계정을 생성하기 위한 권한을 설정합니다.

테이블 스페이스 : alter user musthave quota 5m on users; 명령어를 통해 musthave 계정이 users 테이블 스페이스에서 5MB의 공간을 사용할 수 있도록 설정합니다.

데이터 삽입 : 데이터 입력 후 commit; 명령어를 사용하여 트랜잭션을 완료합니다.

이 스크립트를 실행하면 새 사용자 계정 musthave가 생성되고, 관련 테이블과 시퀀스가 설정되며, 샘플 데이터가 삽입됩니다.

 

main.jsp
0.00MB
action.jsp
0.00MB

 

DB

create table employees (
    employee_id number(4) primary key,
    employee_name varchar2(20) not null,
    department varchar2(20),
    hire_date date,
    salary number(10, 2)
    );
   
insert into employees values (1, '김철수', '영업부', to_date('2023-06-15', 'YYYY-MM-DD'), 52000);
insert into employees values (2, '이영희', '마케팅부', to_date('2023-04-15', 'YYYY-MM-DD'), 62000);
COMMIT;

select * from employees;
select * from member where id = 'test';

 

main.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>
    <h1>사원 정보 관리</h1>
    <form method="post" action="action.jsp">
        <input type="hidden" name="action" id="action" value="">
       
        <label for="employee_id">사원번호:</label>
        <input type="text" id="employee_id" name="employee_id"><br>
        <label for="employee_name">사원명:</label>
        <input type="text" id="employee_name" name="employee_name"><br>
        <label for="department">부서:</label>
        <input type="text" id="department" name="department"><br>
        <label for="hire_date">입사일:</label>
        <input type="text" id="hire_date" name="hire_date"><br>
        <label for="salary">급여:</label>
        <input type="text" id="salary" name="salary"><br>
       
    <input type="submit" value="조회" onclick="setAction('select')">
    <input type="submit" value="등록" onclick="setAction('insert')">
    <input type="submit" value="수정" onclick="setAction('update')">
    <input type="submit" value="삭제" onclick="setAction('delete')">
    </form>
   
    <script>
        function setAction(actionValue) {
            document.getElementById("action").value = actionValue;
        }
    </script>
</body>
</html>

 

action.jsp

<%@ page import="common.JDBConnect"%>
<%@ page import = "java.sql.Statement" %>
<%@ page import = "java.sql.ResultSet" %>
<%@ page import="java.sql.PreparedStatement" %>
<%@ page import="java.sql.Connection" %>
<%@ 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>
    <%
        String action = request.getParameter("action");
        String employee_id = request.getParameter("employee_id");
        String employee_name = request.getParameter("employee_name");
        String department = request.getParameter("department");
        String hire_date = request.getParameter("hire_date");
        String salary = request.getParameter("salary");
        JDBConnect jdbc = new JDBConnect();
   
        switch (action) {
            case "insert":
                String sql = "insert into employees (employee_id, employee_name, department, hire_date, salary) values (?, ?, ?, sysdate, ?)";
                PreparedStatement psmt = jdbc.con.prepareStatement(sql);
               
                psmt.setString(1, employee_id);
                psmt.setString(2, employee_name);
                psmt.setString(3, department);
                psmt.setString(4, salary);
                int inResult = psmt.executeUpdate();
               
                if (inResult > 0) {
                    out.println("Employee inserted successfully.");
                } else {
                    out.println("Failed to insert employee.");
                }
                break;
               
            case "update":
                String update_sql = "UPDATE employees SET employee_name = ?, department = ?, hire_date = ?, salary = ? WHERE employee_id = ?";
                PreparedStatement psmt1 = jdbc.con.prepareStatement(update_sql);
                psmt1.setString(1, employee_name);
                psmt1.setString(2, department);
                psmt1.setString(3, hire_date);
                psmt1.setString(4, salary);
                psmt1.setString(5, employee_id);
                int inResult1 = psmt1.executeUpdate();
               
                if (inResult1 > 0) {
                    out.println("회원정보가 성공적으로 업데이트되었습니다.");
                } else {
                    out.println("회원정보 업데이트에 실패했습니다.");
                }
                break;
               
               
            case "delete":
                String delete_sql = "delete from employees where employee_id = ?";
                PreparedStatement psmt2 = jdbc.con.prepareStatement(delete_sql);
                psmt2.setString(1, employee_id);
                int inResult2 = psmt2.executeUpdate();
               
                if (inResult2 > 0) {
                    out.println("회원정보가 성공적으로 삭제되었습니다.");
                } else {
                    out.println("회원정보를 삭제하는데 실패했습니다.");
                }
                break;
            case "select":
                sql = "select * from employees";  // 블록 내부에서 값만 할당
                Statement stmt = jdbc.con.createStatement();
                //쿼리 수행
                ResultSet rs = stmt.executeQuery(sql);
               
                while(rs.next()) {                  
                                    out.println("<tr>");
                                    out.println("<td>" + rs.getString(1) +"</td>");
                                    out.println("<td>" + rs.getString(2) +"</td>");
                                    out.println("<td>" + rs.getString(3) +"</td>");
                                    out.println("<td>" + rs.getString(4) +"</td>");
                                    out.println("<td>" + "<br>");
                   
                                }
                break;  
       
            }  
       
    %>
   
</body>
</html>

 

728x90
반응형