[Oracle] [JSP] Oracle과 JSP 연동 및 CRUD

jsp oracle

이번에는 jsp와 oracle을 연동하여 직접 폼을 작성하여 insert, update, delete, select 를 실행해보도록 하겠습니다.

 

tomcat 설치

jsp를 실행하기 위해선 일단 apache tomcat이 설치되어있어야 합니다. tomcat이 설치되어있지 않다면 다음 파일을 다운받아 주세요. apache-tomcat-8.0.53-windows-x64

TABLE 생성 및 테스트 데이터 삽입

SQL Command Line에서 table을 생성해보도록 하겠습니다.

table을 생성하기 전에 일단 접속 후 권한(grant) 조정을 해야합니다.
([Oracle] table create, insert, select, update, delete ( CRUD ) 포스트 참고)

-- 테이블 생성
CREATE TABLE comment_list (
    idx int,
    writer varchar(255),
    content varchar(255),
    reg_date timestamp,
    primary key(idx)
);

-- sequence 생성
-- 1부터 시작해서 1씩 증가
-- cache를 해줘야 속도가 빠르다.
CREATE SEQUENCE comment_seq
MINVALUE 1
start with 1
increment by 1
cache 10;

-- CRUD 권한 부여
GRANT INSERT, UPDATE, DELETE, SELECT ON sys.comment_list to system;

-- SEQUENCE 권한 부여
GRANT SELECT, ALTER on sys.comment_seq to system;

-- 테스트 데이터 생성
INSERT INTO comment_list (idx, writer, content, reg_date)
VALUES (comment_seq.NEXTVAL, '작성자', '내용', sysdate);

-- 테스트 데이터 조회
SELECT * FROM comment_list;

web project 생성 및 TOMCAT 연동

  1. Dynamic Web Project 생성
    Dynamic Web Project 생성
  2. New Runtime에서 Apache Tomcat v8.0 선택
    Runtime에서 Apache Tomcat v8.0 버전 선택

  3. 프로젝트 생성 확인
  4. 상단의 Window => Preferences 에서 encoding 검색 후 전부 UTF-8로 변경
  5. index.jsp 생성
  6. Oracle JDBC 추가
    Oracle JDBC의 위치는 이전 포스트에서 상세히 다루고 있습니다.

    WebContent - WEB-INF - lib 폴더에 붙여넣기
  7. Tomcat을 통하여 Web Server 실행

 

CRUD CODE 작성

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<%
    /* 한글 깨짐 방지 */
    request.setCharacterEncoding("UTF-8");

    /* db connection */
    String user = "system";
    String pw = "oracle";
    String url = "jdbc:oracle:thin:@localhost:1521:xe";
    String sql = "";
    Class.forName("oracle.jdbc.driver.OracleDriver");
    Connection conn = DriverManager.getConnection(url, user, pw);
    ResultSet res;
    
    /* insert, update, delete execution */
    String action = request.getParameter("action");
    if (action != null) {
        String writer = request.getParameter("writer");
        String content = request.getParameter("content");
        String idx = request.getParameter("idx");
        switch (action) {
            case "insert" :
                sql = "SELECT idx from sys.comment_list where rownum <= 1 order by idx desc";
                res = conn.prepareStatement(sql).executeQuery();
                int lastid = 1;
                if (res.next()) {
                    lastid = res.getInt("idx")+1;                   
                }
                sql = String.format("INSERT INTO sys.comment_list values (%s, '%s', '%s', sysdate)", lastid, writer, content);
            break;
            case "update" : sql = String.format("UPDATE sys.comment_list SET writer = '%s', content = '%s' where idx = %s", writer, content, idx); break;
            case "delete" : sql = String.format("DELETE FROM sys.comment_list where idx = %s", idx); break;
        }
        System.out.println(sql);
        conn.prepareStatement(sql).executeUpdate();
    }
    
%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <% /* select list */
        sql = "SELECT * FROM sys.comment_list";
        res = conn.prepareStatement(sql).executeQuery();
        int idx;
        String writer, content, date, list = "";
        while (res.next()) {
            idx = res.getInt("idx");
            writer = res.getString("writer");
            content = res.getString("content");
            date = res.getString("reg_date");
            System.out.println(idx);
            System.out.println(writer);
            System.out.println(content);
            System.out.println(date);
            list += String.format("<p>%s / %s / %s / %s</p>", idx, writer, content, date);
        }
    %>
    <form action="" method="post">
        <fieldset><legend>추가</legend>
            <input type="hidden" name="action" value="insert" />
            <input type="text" name="writer" placeholder="작성자" size="10">
            <input type="text" name="content" placeholder="내용" size="80">
            <button type="submit">전송</button>
        </fieldset>
    </form>
    <form action="" method="post">
        <fieldset><legend>수정</legend>
            <input type="hidden" name="action" value="update" />
            <input type="text" name="idx" placeholder="글번호" size="5">
            <input type="text" name="writer" placeholder="작성자" size="10">
            <input type="text" name="content" placeholder="내용" size="80">
            <button type="submit">전송</button>
        </fieldset>
    </form>
    <form action="" method="post">
        <fieldset><legend>삭제</legend>
            <input type="hidden" name="action" value="delete" />
            <input type="text" name="idx" placeholder="글번호" size="5">
            <button type="submit">전송</button>
        </fieldset>
    </form>
</body>
</html>