[JSP] Excel 파일 업로드 후 내용 파싱하여 DB에 저장하기(Apache Tika, Apache POI)
·
[Programming Language]/[JSP]
[머릿말]엑셀 파일을 다뤄야 할 땐 보통 ".csv" 확장자의 형태로 다뤄지는데, 나는 ".xls" 및 ".xlsx" 확장자 파일을 기준으로 내용을 파싱하여 DB에 저장하는 실습을 진행해보았다. 내 개발 환경은 다음과 같다.Java 1.6 - https://www.oracle.com/kr/java/technologies/javase-java-archive-javase6-downloads.htmlApache Tomcat 7.0.109 - https://archive.apache.org/dist/tomcat/tomcat-7/v7.0.109/bin/Oracle DB 11g XE - https://www.oracle.com/database/technologies/xe-prior-release-downloads...
[Oracle] 계층형 쿼리(START WITH ~ CONNECT BY PRIOR ~ ORDER SIBLINGS BY ~)
·
[DB]/- Oracle
1. 계층형 쿼리란?계층형 쿼리란 한 테이블 내에 부모-자식 관계를 갖는 두 컬럼이 존재할 때 이 관계를 기준으로 트리 구조로 데이터를 조회할 때 사용하는 쿼리다. 예를 들면 다음과 같은 경우에 계층형 쿼리를 사용할 수 있다.직원 테이블 : 직원 A가 직원 B의 매니저이고, 직원 B는 직원 C의 매니저인 경우부서 테이블 : 부서 A는 부서 B의 상위 부서이고, 부서 B는 부서 C의 상위 부서인 경우게시판 댓글 테이블 : 댓글은 대댓글과 대댓글의 대댓글(대대댓글?)의 구조를 가짐위 사진처럼 계층형 쿼리는 LEVEL 값을 갖는다. 컬럼명도 그대로 LEVEL이며, 최상위 행이 1, 최상위 행의 자식 행이 2, 이 자식 행의 자식 행이 3인 구조를 갖는다.2. 사용 방법사용 방법은 다음과 같다.SELECT *F..
[Oracle] 집합 연산자(UNION, UNION ALL, INTERSECT, MINUS)
·
[DB]/- Oracle
오라클에는 4가지 집합 연산자[UNION, UNION ALL, INTERSECT, MINUS]가 존재한다. 이중 UNION ALL을 제외한 나머지 3개는 모두 정렬(SORT)과 중복 제거(UNIQUE)가 이뤄진다. 반면 UNION ALL 연산자는 정렬과 중복 제거 없이 단순 쿼리 결과 합치기만 이뤄진다. 그러므로 UNION ALL 연산자는 성능에 부담이 가지 않지만 UNION, INTERSECT, MINUS 연산자는 많이 사용할수록 성능에 부담을 주게 된다.※ 주의사항조회하는 컬럼의 개수와 데이터 타입은 두 쿼리가 반드시 일치해야 한다. 컬럼을 여러개 조회하는 경우 이것들을 하나의 집합으로 묶어서 조회하기 때문에 반드시 개수와 데이터 타입이 일치해야 한다. 그렇지 않으면 아래와 같은 오류가 발생한다. Q..
[JSP|Oracle] 쿼리에 로직을 담아야 하나? 코드(서비스)에 로직을 담아야 하나?
·
[DB]/- Oracle
[서론]쿼리를 짜다보면 이 로직을 쿼리에 담아야 할지, 코드(서비스)에 담아야 할지 고민되는 순간이 있다. 예를 들면 '조회된 데이터 중 null인 데이터에 대한 처리'가 필요한 경우가 있다. 쿼리에서 처리하는 것도, 코드에서 처리하는 것도 모두 가능하고 공부하는 환경에서는 큰 차이를 느낄 수도 없기 때문이다. 이 의문에 대한 답은 "그때그때 상황에 따라 적절히 사용해야 한다"라고 말할 수 있다. 아니 사실은 코드에서 더 많은 처리가 이뤄지는 편이긴 하다. 이에 대한 궁금증을 가진 사람들의 글은 어렵지 않게 찾아볼 수 있다. 아래 첨부된 사이트만 보더라도 이 의문에 대한 답변을 얻을 수 있다. OKKY에는 은둔 고수들이 정말 많다... 서비스 로직 위주 vs 쿼리 위주 | OKKY Q&A스프링 위주로 공..
[Oracle] JOIN할 때 조건을 ON 절에 적는 것과 WHERE 절에 적는 것의 차이
·
[DB]/- Oracle
JOIN할 때 조건을 ON 절에 적는 것과 WHERE 절에 적는 것에 어떤 차이가 있는지 궁금해졌다. 결론부터 말하자면 INNER JOIN에서는 차이가 없고, OUTER JOIN에서는 차이가 발생한다. INNER JOIN에서 ON 절에 적는 조건은 의미적으로 JOIN 조건을 뜻하고, WHERE 절에는 JOIN 조건이 아닌 조회할 데이터에 대한 조건을 뜻한다.오라클에서 기본으로 제공하는 EMPLOYEES 테이블과 DEPARTMENTS 테이블을 JOIN 해보도록 하겠다. DEPARTMENTS 테이블의 PRIMARY KEY인 DEPARTMENT_ID는 EMPLOYEES 테이블의 FOREIGN KEY이다.1. INNER JOIN부서 번호(department_id)가 90번인 직원들의 직원 번호, 이름, 매니저 ..
[Oracle] 트랜잭션 Lock, 테이블 Lock [TX, TM / Exclusive Mode와 Share Mode의 차이]
·
[DB]/- Oracle
포스팅을 시작하기에 앞서 Lock을 다루기 위해서는 2개의 세션이 필요하다. 나는 SQL Developer과 sqlplus를 사용하였다. 내가 사용하는 계정은 학습용으로 만든 ORCLSTUDY이다. 이 두 세션 ID(SID)를 잘 구분하길 바란다.SELECT sid, username, program FROM v$session WHERE username='ORCLSTUDY';또 사용할 test 테이블은 다음과 같은 구조를 가지고 있다.CREATE TABLE test ( id NUMBER PRIMARY KEY, name VARCHAR2(50));INSERT INTO test VALUES(1, '홍길동');INSERT INTO test VALUES(2, '김개똥');INSERT INTO test V..
[Oracle] GROUP BY와 DISTINCT의 차이
·
[DB]/- Oracle
Oracle DB에서 GROUP BY와 DISTINCT는 같은 결과를 반환한다. 개념적으로 봤을때 GROUP BY는 값을 그룹핑하여 그룹별 데이터를 조회하는 것이고, DISTINCT는 중복된 값이 여러개 있을 때 1개씩만 나오도록 조회하는 것이다. 이 둘의 예제는 다음과 같다. 오라클의 기본 테이블을 기준으로 하는데 만약 기본 테이블 사용법을 모른다면 아래 포스팅을 참고하길 바란다. [Oracle] employees, departments 등의 기본 제공 테이블 사용 방법** Oracle 11g를 기준으로 작성되었습니다. **1. HR 계정이란?오라클에는 기본 제공 테이블이 존재한다. 이것들을 사용하여 다양한 실습을 해볼 수 있는데, 이는 HR 계정으로 접속해야 사용할 수 있다.semin1127.tist..
[JSP] DB 연결 뒤 쿼리 실행 방법(Statement VS PreparedStatement)
·
[Programming Language]/[JSP]
** 이 포스팅은 DB 연결이 완료된 후의 상황을 기준으로 합니다. 만약 DB 연결이 되지 않은 경우 아래 포스팅을 참고해주세요. **** DB는 Oracle을 기준으로 합니다. ** [JSP] DB 연결 방법(DriverManager, Connection Pool)** 본 포스팅은 Oracle 11g을 기준으로 작성되었습니다 **1. JDBC 파일 필요자바에서 데이터베이스에 접속하기 위해선 JDBC를 사용해야 한다. JDBC(Java Database Connectivity)란 자바에서 데이터베이스와 연결semin1127.tistory.comDB 연결은 Connection Pool 방식으로 하는 것이 좋지만, 이 포스팅에서는 단순 DB 연결을 1번만 맺어 쿼리를 실행하는 것을 가정하므로 DriverMan..
[Oracle][Programmers] 자동차 대여 기록 별 대여 금액 구하기
·
[Programmers]/- SQL
1. 문제 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr총 3개의 테이블이 등장하니 각 테이블에서 얻을 수 있는 정보를 잘 분석해야 한다. 자동차 종류(CAR_TYPE)가 '트럭'인 자동차의 대여 기록에 대해 대여 기록 별로 대여 금액(컬럼명 : FEE)을 구하여 대여 기록 ID(HISTORY_ID)와 대여 금액(FEE) 리스트를 출력하는 문제. 결과는 대여 금액(FEE)을 기준으로 내림차순 정렬, 대여 금액이 같다면 대여 기록 ID(HISTORY_ID)를 기준으로 내림차순 정렬. 2. 풀이자동차 종류가 트럭 : WHERE car_type = '트럭'대여 기록별 대여 금액 : 왠지 GROUP BY를 써야 할 것..
[Oracle] employees, departments 등의 기본 제공 테이블 사용 방법
·
[DB]/- Oracle
** Oracle 11g를 기준으로 작성되었습니다. **1. HR 계정이란?오라클에는 기본 제공 테이블이 존재한다. 이것들을 사용하여 다양한 실습을 해볼 수 있는데, 이는 HR 계정으로 접속해야 사용할 수 있다. HR 계정 역시 Oracle DB를 설치하면 기본으로 제공되는 계정이다. 2. 사용 방법2-1. HR 계정의 잠금 해제먼저 HR 계정의 잠금을 해제하는 것이 필요하다. sqlplus를 통해 관리자 계정으로 접속한다. Enter password: 에서 아무것도 입력하지 않고 그냥 엔터를 누르면 된다.sqlplus sys as sysdba 접속한 뒤에는 아래 쿼리를 입력해준다.ALTER USER hr ACCOUNT UNLOCK;2-2. HR 계정의 비밀번호 설정다음으로 HR 계정의 비밀번호를 설정해..