728x90
수업내용
1교시 (09:30-10:20)
- 지난 시간 복습
- 웹 어플리케이션
1. 컴퓨터
localhost 127.0.0.1
ip : 고정, 수동
컴퓨터 이름 : NET BIOS NAME
2. 3-Tier
프리젠테이션 레이어
비즈니스 레이어
데이터베이스 레이어
3. 스키마 (테이블, 로우, 컬럼, 피케이, 포린키, 널)
SELECT 하면 컬럼단위로 로우로 조회해준다.
4. 질의문 작성하는 규칙
2교시 (10:30-11:20)
- Oracle 연결 설명
3교시 (11:30-12:20)
- EmpVO
package a.b.c.oracle.vo;
public class EmpVO {
/*
사원번호 EMPNO NUMBER
사원이름 ENAME VARCHAR2
사원직책 JOB VARCHAR2
상관사원번호 MGR VARCHAR2
입사일 HIREDATE DATE
급여 SAL NUMBER
수당 COMM NUMBER
부서번호 DEPTNO NUMBER
*/
// 컬럼명 --> 변수명 : 소문자
// 데이터타입 NUMBER, VARCHAR2, DATE -> 전부 다 문자열로 한다. String
// empno : 멤버 변수, 스트링, 인포메이션 하이딩
private String empno;
private String ename;
private String job;
private String mgr;
private String hiredate;
private String sal;
private String comm;
private String deptno;
// constructor
public EmpVO() {
}
public EmpVO( String empno, String ename,
String job, String mgr,
String hiredate, String sal,
String comm, String deptno) {
this.empno = empno;
this.ename = ename;
this.job = job;
this.mgr = mgr;
this.hiredate = hiredate;
this.sal = sal;
this.comm = comm;
this.deptno = deptno;
}
// getter
public String getEmpno() {
return empno;
}
public String getEname() {
return ename;
}
public String getJob() {
return job;
}
public String getMgr() {
return mgr;
}
public String getHiredate() {
return hiredate;
}
public String getSal() {
return sal;
}
public String getComm() {
return comm;
}
public String getDeptno() {
return deptno;
}
// setter
public void setEmpno(String empno) {
this.empno = empno;
}
public void setEname(String ename) {
this.ename = ename;
}
public void setJob(String job) {
this.job = job;
}
public void setMgr(String mgr) {
this.mgr = mgr;
}
public void setHiredate(String hiredate) {
this.hiredate = hiredate;
}
public void setSal(String sal) {
this.sal = sal;
}
public void setComm(String comm) {
this.comm = comm;
}
public void setDeptno(String deptno) {
this.deptno = deptno;
}
}
- OracleTest_2
package a.b.c.oracle;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import a.b.c.oracle.vo.EmpVO;
public class OracleTest_2 {
// DataSource 정보 : 데이터베이스 연결 정보
public static final String JDBC_DRIVER = "oracle.jdbc.driver.OracleDriver";
public static final String JDBC_URL = "jdbc:oracle:thin:@localhost:1521:orclKSY00";
public static final String JDBC_USER = "scott";
public static final String JDBC_PASSWORD = "tiger";
// sql Query
public static String sqlQuery = "SELECT EMPNO AS EA_1, ENAME EA_2, JOB EA_3, MGR EA_4 FROM EMP ORDER BY 1 DESC";
// public static String sqlQuery = "SELECT EMPNO, ENAME, JOB, MGR FROM EMP ORDER BY 1 DESC";
// 생성자
public OracleTest_2() {
try {
Class.forName(JDBC_DRIVER);
} catch (Exception e) {
System.out.println("JDBC 드라이버를 찾지 못했어요 >>> : " + e.getMessage());
}
}
public ArrayList<EmpVO> empSelect() {
ArrayList<EmpVO> aList = null;
try {
Connection conn = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASSWORD);
Statement stmt = conn.createStatement();
ResultSet rsRs = stmt.executeQuery(sqlQuery);
if (rsRs != null) {
aList = new ArrayList<EmpVO>();
while (rsRs.next()) {
EmpVO evo = new EmpVO();
evo.setEmpno(rsRs.getNString("EMPNO"));
evo.setEname(rsRs.getNString("ENAME"));
evo.setJob(rsRs.getNString("JOB"));
evo.setMgr(rsRs.getNString("MGR"));
aList.add(evo);
}
}
} catch (Exception e) {
System.out.println(e);
}
return aList;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
OracleTest_2 ot2 = new OracleTest_2();
ArrayList<EmpVO> aList = ot2.empSelect();
if (aList != null && aList.size() > 0) {
for (int i=0; i < aList.size(); i++) {
EmpVO _evo = aList.get(i);
System.out.print(_evo.getEmpno() + " : ");
System.out.print(_evo.getEname() + " : ");
System.out.print(_evo.getJob() + " : ");
System.out.println(_evo.getMgr());
}
}
}
}
4교시 (12:30-13:20)
- 요청사항
- DEPT 테이블 조회하기 JDBC 연동하기
DeptTest 자바에서 deptSelect() 함수를 사용해서
Dept 테이블에 있는 컬럼 전체를 조회해서 main 함수에서 콘솔에 출력하시오
단, DeptVO 클래스를 사용하기
DeptTest.java
public ArrayList<DeptVO> deptSelect();
DeptVO.java
작업해보기
------------
A. 데이터베이스 단 처리
------------------------
1. 테이블 정의서 또는 ERD를 찾아서 DEPT 테이블 내역을 조사한다.
2. 테이블에서 조회할 컬럼을 찾는다.
3. sqlplus에서 해당 테이블을 쿼리문으로 만들어서 조회해 본다.
전체 건수 확인하기
SELECT COUNT(*) FROM DEPT;
전체 건수가 많으면 ROWNUM으로 몇 건만 조회해서
테이블의 컬럼 명과 데이터의 포맷을 확인한다.
SELECT * FROM DEPT WHERE ROWNUM <= 3;
SELECT * FROM DEPT;
SELECT
A.DEPTNO AS DEPTNO -- 부서번호
,A.DNAME AS DNAME -- 부서 이름
,A.LOC AS LOC -- 지역
FROM DEPT A;
B. 비즈니스 단 처리
------------------------
패키지 구성
클래스 구성
함수 구성
변수 구성
a.b.c.oracle.DeptTest
public ArraList<DeptVO> deptSelect();
부서 번호 DEPTNO NUMBER
부서 이름 DNAME VARCHAR2
지역 LOC VARCHAR2
a.b.c.oracle.vo.DeptVO
private String deptno;
private String dname;
private String loc;
1. VO 클래스 만들기 : 테이블 정의서 이용
2. DeptTest 클래스 만들기
- DEPT 테이블 조회하기 JDBC 연동하기
5교시 (14:30-15:20)
- DeptVO
package a.b.c.oracle.vo;
public class DeptVO {
private String deptno;
private String dname;
private String loc;
// constructor
public DeptVO() {
}
public DeptVO(String deptno, String dname, String loc) {
super();
this.deptno = deptno;
this.dname = dname;
this.loc = loc;
}
// getter
public String getDeptno() {
return deptno;
}
public String getDname() {
return dname;
}
public String getLoc() {
return loc;
}
// setter
public void setDeptno(String deptno) {
this.deptno = deptno;
}
public void setDname(String dname) {
this.dname = dname;
}
public void setLoc(String loc) {
this.loc = loc;
}
}
- DeptTest
package a.b.c.oracle;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import a.b.c.oracle.vo.DeptVO;
public class DeptTest {
// DataSource 정보 : 데이터베이스 연결 정보
public static final String JDBC_DRIVER = "oracle.jdbc.driver.OracleDriver";
public static final String JDBC_URL = "jdbc:oracle:thin:@localhost:1521:orclKSY00";
public static final String JDBC_USER = "scott";
public static final String JDBC_PASSWORD = "tiger";
// sql Query
public static String sqlQuery = "SELECT DEPTNO, DNAME, LOC FROM DEPT";
// 생성자
public DeptTest() {
try {
Class.forName(JDBC_DRIVER);
} catch (Exception e) {
System.out.println("JDBC 드라이버를 찾지 못했어요 >>> : " + e.getMessage());
}
}
// deptSelect() 함수
public ArrayList<DeptVO> deptSelect() {
ArrayList<DeptVO> aList = null;
Connection conn = null;
Statement stmt = null;
ResultSet rsRs = null;
try {
// 커넥션 연결
conn = DriverManager.getConnection(DeptTest.JDBC_URL,
DeptTest.JDBC_USER,
DeptTest.JDBC_PASSWORD);
// 쿼리문전달통로 만들기
stmt = conn.createStatement();
// 쿼리문 전달 및 질의결과 받아오기
rsRs = stmt.executeQuery(DeptTest.sqlQuery);
// 데이터 베이스에 받아온 질의결과 DeptVO와 ArrayList에 넣기
// 데이터가 있으면 수행하기
if (rsRs != null) {
//DeptVO 클래스 담은 배열객체 ArrayList를 인스턴스한다.
aList = new ArrayList<DeptVO>();
// rsRs에서 데이터 추출해서 DeptVO에 넣고 ArrayList에 담기
// 1. while 구문으로 next() 함수 리절트셋에서 레코드 추출하기
while (rsRs.next()) {
// DeptVO 클래스 선언 및 인스턴스 : 데이터베이스에서 가져온 데이터 담기 위해서
DeptVO dvo = new DeptVO();
dvo.setDeptno(rsRs.getNString(1));
dvo.setDname(rsRs.getNString(2));
dvo.setLoc(rsRs.getNString(3));
// ArrayList에 DeptVO 클래스 담기
aList.add(dvo);
}
} else {
System.out.println("데이터베이스에서 가져온 데이터가 없습니다. >>> : ");
}
} catch (Exception e) {
System.out.println("에러가 >>> : " + e.getMessage());
}
return aList;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
DeptTest dt = new DeptTest();
ArrayList<DeptVO> aList = dt.deptSelect();
if (aList != null && aList.size() > 0) {
System.out.println("몇 건인가 >>> : " + aList.size());
for (int i=0; i < aList.size(); i++) {
DeptVO _dvo = aList.get(i);
System.out.print(_dvo.getDeptno() + " : ");
System.out.print(_dvo.getDname() + " : ");
System.out.println(_dvo.getLoc());
}
}
}
}
6교시 (15:30-16:20)
- DESC, DISTINCT
-- DESC: DESCRIBE : 테이블의 구조 확인
-- 테이블 컬럼명, NULL 여부, 데이터 타입 & 사이즈
DESC DEPT;
DESC EMP;
DESC TAB;
-- DISTINCT : 중복 제거하는 키워드
SELECT DEPTNO FROM EMP;
SELECT DISTINCT DEPTNO FROM EMP;
SELECT DEPTNO FROM EMP WHERE DEPTNO = 10;
SELECT COUNT(DEPTNO) FROM EMP WHERE DEPTNO = 10;
SELECT DEPTNO FROM EMP WHERE DEPTNO = 20;
SELECT COUNT(DEPTNO) FROM EMP WHERE DEPTNO = 20;
SELECT DEPTNO FROM EMP WHERE DEPTNO = 30;
SELECT COUNT(DEPTNO) FROM EMP WHERE DEPTNO = 30;
-- EMP 테이블에서 사원번호를 전체 조회하시오
DESC EMP;
-- SELECT * FROM EMP WHERE JOB = SALESMAN;
-- SELECT * FROM EMP WHERE JOB = "SALESMAN";
SELECT * FROM EMP WHERE JOB = 'SALESMAN';
-- 7521 SALESMAN 이름은?
SELECT ENAME FROM EMP WHERE JOB = 'SALESMAN' AND EMPNO = 7521;
SELECT ENAME FROM EMP WHERE JOB = 'SALESMAN' AND EMPNO = '7521';
-- 30 부서 사원 번호가 7499인 사원의 직책?
SELECT JOB FROM EMP WHERE DEPTNO = 30 AND EMPNO = 7499;
SELECT JOB FROM EMP WHERE DEPTNO = 30 AND EMPNO = '7499';
-- 스미스 사원의 사원 번호, 직책, 입사일을 조회하시오
-- SELECT * FROM EMP WHERE ENAME = smith;
-- SELECT * FROM EMP WHERE ENAME = 'smith';
SELECT EMPNO, JOB, HIREDATE FROM EMP WHERE ENAME = UPPER('smith');
SELECT * FROM EMP WHERE ENAME = 'SMITH';
-- SELECT * FROM EMP WHERE ENAME = LOWER('SMITH');
SELECT EMPNO, JOB, TO_CHAR(HIREDATE, 'YYYY-MM-DD') FROM EMP WHERE ENAME = UPPER('smith');
SELECT EMPNO, JOB, TO_CHAR(HIREDATE, 'YYYY-MM-DD') AS HIREDATE FROM EMP WHERE ENAME = UPPER('smith');
-- 부서번호 20번 사원들의 입사일을 조회하시오. 입사일 형식은 YYYY.MM.DD
SELECT * FROM EMP WHERE DEPTNO = 20;
SELECT HIREDATE FROM EMP WHERE DEPTNO = 20;
SELECT TO_CHAR(HIREDATE, 'YYYY.MM.DD') FROM EMP WHERE DEPTNO = 20;
7교시 (16:30-17:20)
- DUAL, ROWNUM, IS NULL, IS NOT NULL, NVL()
-- 오라클에서만 제공하는 DUMMY TABLE : DUAL
DESC DUAL;
SELECT * FROM DUAL;
SELECT 1 FROM DUAL;
SELECT 1 + 2 FROM DUAL;
-- TO_DATE : 날짜 형식으로 바꾸는 함수
-- TO_CHAR : 날짜 형식을 바꾸는 함수
SELECT TO_CHAR(TO_DATE('80/12/17'), 'YYYY.MM.DD') FROM DUAL;
-- SYSDATE 오늘 날짜를 추출하는 키워드
SELECT SYSDATE FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'YYYY.MM.DD') FROM DUAL;
SELECT UPPER('smith') FROM DUAL;
SELECT LOWER('SMITH') FROM DUAL;
SELECT 3 * 4 FROM DUAL;
SELECT 3 / 4 FROM DUAL;
SELECT 3 - 4 FROM DUAL;
SELECT 3 + 4 FROM DUAL;
--================================
SELECT NULL FROM DUAL;
SELECT '' FROM DUAL;
SELECT ' ' FROM DUAL;
SELECT DUMP(NULL) FROM DUAL;
SELECT DUMP('') FROM DUAL;
SELECT DUMP(' ') FROM DUAL;
SELECT DUMP(' 황 병 현 ') FROM DUAL;
--================================
-- 사원 테이블에서 5건만 조회하시오
SELECT * FROM EMP;
SELECT * FROM EMP WHERE ROWNUM <=5;
-- NULL 데이터 처리하기
SELECT COMM FROM EMP;
SELECT COUNT(COMM) FROM EMP;
SELECT COUNT(NULL) FROM DUAL;
SELECT COUNT(0) FROM DUAL;
-- 오라클에서 NULL 데이터는
-- IS NULL 또는 IS NOT NULL로 비교해야 한다.
SELECT COMM FROM EMP WHERE COMM IS NULL;
SELECT COMM FROM EMP WHERE COMM IS NOT NULL;
-- 오라클에서 NULL은 = 연산자로 비교하지 않는다.
SELECT COMM FROM EMP WHERE COMM = NULL;
-- NULL 있는 컬럼 카운트 함수 사용하기
SELECT COUNT(COMM) FROM EMP WHERE COMM IS NOT NULL;
-- NULL 값을 처리하는 함수
-- NVL() 함수
SELECT NVL(NULL, 0) FROM DUAL;
-- EMP 테이블의 전체 건수는? 단 COMM 컬럼을 사용하세요
SELECT COMM FROM EMP WHERE COMM IS NULL;
SELECT COMM FROM EMP WHERE COMM IS NOT NULL;
SELECT NVL(COMM, 0) AS COMM FROM EMP;
SELECT COUNT(NVL(COMM,0)) AS COMM FROM EMP;
8교시 (17:30-18:30)
- LIKE 연산자 %, _ 검색, 날짜 데이터 조회
-- LIKE 연산자 %(와일드 카드) 검색
-- 사원테이블에서 사원 이름이 S로 시작하는 사원을 검색하시오
SELECT * FROM EMP WHERE ENAME LIKE 'S%';
-- 사원테이블에서 사원 이름이 S로 끝나는 사원을 검색하시오
SELECT * FROM EMP WHERE ENAME LIKE '%S';
-- 사원테이블에서 사원 이름에 S가 포함되어 있는 사원을 검색하시오
SELECT * FROM EMP WHERE ENAME LIKE '%S%';
-- 사원테이블에서 사원 번호가 7로 시작하는 사웡ㄴ들을 검색하시오
SELECT ENAME, EMPNO FROM EMP WHERE EMPNO LIKE '7%';
-- 사원 테이블에서 사원 번호가 9로 끝나는 사원들을 검색하시오
SELECT * FROM EMP WHERE EMPNO LIKE '%9';
SELECT * FROM EMP WHERE ENAME LIKE 's%';
SELECT * FROM EMP WHERE ENAME LIKE UPPER('s%');
-- LIKE 연산자와 _(와일드카드) 검색, 조회
SELECT * FROM EMP;
-- 두 번째 문자가 A
SELECT * FROM EMP WHERE ENAME LIKE '_A%';
-- 세 번째 문자가 A
SELECT * FROM EMP WHERE ENAME LIKE '__A%';
-- 중간에 A가 포함되지 않은
SELECT * FROM EMP WHERE ENAME NOT LIKE '%A%';
-- 날짜 데이터 조회
-- 1981년 1월 1일 이전에 입사한 사원을 출력하시오
SELECT HIREDATE FROM EMP;
SELECT * FROM EMP WHERE HIREDATE <= '81/01/01';
SELECT * FROM EMP WHERE HIREDATE <= '1981/01/01';
SELECT * FROM EMP WHERE HIREDATE <= '1981-01-01';
SELECT * FROM EMP WHERE HIREDATE <= '1981.01.01';
SELECT * FROM EMP WHERE HIREDATE <= '81/1/1';
-- ##############################################
SELECT * FROM EMP
WHERE TO_CHAR(HIREDATE, 'YYYY-MM-DD')
<= TO_CHAR(TO_DATE('81/01/01'), 'YYYY-MM-DD');
-- ##############################################
/*
SELECT TO_CHAR(첫번째 변수, 두 번째 변수) FROM DUAL
첫번째 변수는 항상 DATE 타입이어야 한다.
두번쨰 변수는 날짜 형식이어야 한다.
*/
SELECT TO_CHAR(HIREDATE, 'YYYY-MM-DD') FROM EMP;
SELECT TO_CHAR(TO_DATE(HIREDATE), 'YYYY-MM-DD') FROM EMP;
--SELECT TO_CHAR('81/01/01', 'YYYY-MM-DD') FROM DUAL;
SELECT TO_CHAR(TO_DATE('81/01/01'), 'YYYY-MM-DD') FROM DUAL;
Notes
728x90
'국비지원교육 (22.01-22.07) > 강의노트' 카테고리의 다른 글
22-03-10(목) 029일차 [Java, Oracle] 화면-서비스-다오-sql-vo-common 이어지는 검색하기 (0) | 2022.05.10 |
---|---|
22-03-08(화) 028일차 [Oracle] WHERE절, IN, BETWEEN A AND B, 산술연산자 (0) | 2022.05.10 |
22-03-04(금) 026일차 [Oracle] SELECT-FROM-WHERE, ORDER BY, 이클립스 데이터베이스 연결 (0) | 2022.05.10 |
22-03-03(목) 025일차 [Oracle] Oracle DB 설치, SQL Developer 설치 (0) | 2022.05.09 |
22-03-02(수) 024일차 [Java] 파일 IO, 방화벽 (0) | 2022.05.09 |