클래스는 여러 자료를 담을 수 있는 자료형이다.

 

명함이라는 클래스 자료형

 

명함이라는 클래스로 만든 인스턴스

 

기본자료형과 클래스자료형의 차이

기본자료형(예를들어 int 등)은 int a = 1; 이라고 만들면 a 에 1이라는 숫자가 들어간다.

하지만 클래스자료형은 명함 m1 = new 명함(); 이라고 만들면
m1에 데이터가 아닌 그 데이터를 가리키는 주소가 들어간다.

위에서 생성한 m1명함 m2 = m1; 이런식으로 m2에 넣는다고 하더라도
데이터가 들어가는 것이 아닌 주소가 들어가게 된다.

즉 아래와 같이
기본자료형반환() 이라는 함수를 호출하여 반환된 값을 출력해보면 값이 나오지만,
클래스자료형반환() 이라는 함수를 호출하여 반환된 값을 출력해보면 해당 데이터의 주소가 나온다.
(컴퓨터에 따라 주소가 아니라 인스턴스의 내용이 대괄호 안에 나올 수 있다.)

 

 

package ch13;

class A {
	int a = 10;
}

public class Test {
	
	static void sample(A a) {
		System.out.println(a.a);
	}
	
	
	public static void main(String[] args) {
		
	// 기본자료형은 데이터 자체를 저장한다
	int a1 = 10;
	int a2 = a1;
	
	a1 = a1 + 10;
	System.out.println(a1);
	System.out.println(a2);
	
	
	// 클래스자료형은 인스턴스의 주소값을 저장한다
	A test = new A();
	A test1 = test;
	
	test.a = test.a + 10;
	System.out.println(test.a);
	System.out.println(test1.a);
	
	
	// 서로 다른 인스턴스 이기 때문에 데이터가 따로 계산된다
	A test2 = new A();
	A test3 = new A();
	
	test2.a = test2.a + 10;
	System.out.println(test2.a);
	System.out.println(test3.a);
	}
}

 

순서

공공데이터 링크확인
http://json.parser.online.fr/ 으로 JSON구조확인하기
http://www.jsonschema2pojo.org/ 으로 Class파일 쉽게 만들기
Gson으로 Json -> 자바객체 전환하기
이용하기

 

먼저 공공데이터 링크를 확인한다

 

http://json.parser.online.fr/ 으로 JSON구조확인하기

위 사이트는 json을 보기쉽게 해준다 (자바에서 이용할때 참조)

 

http://www.jsonschema2pojo.org/ 으로 Class파일 쉽게 만들기

위 사이트에 json을 붙여넣고 아래와 같이 설정을한뒤
preview를 한다

 

package mask;

import java.util.List;

public class MaskInfo {

	private long count;
	private String page;
	private List<StoreInfo> storeInfos = null;
	private long totalCount;
	private long totalPages;

	public long getCount() {
		return count;
	}

	public void setCount(long count) {
		this.count = count;
	}

	public String getPage() {
		return page;
	}

	public void setPage(String page) {
		this.page = page;
	}

	public List<StoreInfo> getStoreInfos() {
		return storeInfos;
	}

	public void setStoreInfos(List<StoreInfo> storeInfos) {
		this.storeInfos = storeInfos;
	}

	public long getTotalCount() {
		return totalCount;
	}

	public void setTotalCount(long totalCount) {
		this.totalCount = totalCount;
	}

	public long getTotalPages() {
		return totalPages;
	}

	public void setTotalPages(long totalPages) {
		this.totalPages = totalPages;
	}

}
package mask;

public class StoreInfo {

	private String addr;
	private long code;
	private double lat;
	private double lng;
	private String name;
	private String type;

	public String getAddr() {
		return addr;
	}

	public void setAddr(String addr) {
		this.addr = addr;
	}

	public long getCode() {
		return code;
	}

	public void setCode(long code) {
		this.code = code;
	}

	public double getLat() {
		return lat;
	}

	public void setLat(double lat) {
		this.lat = lat;
	}

	public double getLng() {
		return lng;
	}

	public void setLng(double lng) {
		this.lng = lng;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}

}

 

Gson으로 Json -> 자바객체 전환하기

 

이용하기

package mask;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

import com.google.gson.Gson;

public class MaskApp {

	public static long maskPage() {
		try {
			// 1번 주소 객체 만들기
			URL url = new URL("https://8oi9s0nnth.apigw.ntruss.com/corona19-masks/v1/stores/json?page=1");

			// 2번 스트림 연결
			HttpURLConnection con = (HttpURLConnection) url.openConnection();

			// 3번 버퍼 연결 (문자열)
			BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));

			// 4. 문자 더하기
			StringBuilder sb = new StringBuilder();

			String input = "";
			while ((input = br.readLine()) != null) {
				sb.append(input);
			}

			System.out.println(sb.toString());
			System.out.println();

			br.close(); // 버퍼 닫기
			con.disconnect(); // 스트림 닫기

			// 5. 자바 오브젝트로 변환
			Gson gson = new Gson();
			MaskInfo mask = gson.fromJson(sb.toString(), MaskInfo.class);
			long count = mask.getTotalPages();

			return count;
		} catch (Exception e) {
			e.printStackTrace();
		}

		return 0;
	}

	public static MaskInfo maskInfo(int page) {
		try {
			// 1번 주소 객체 만들기
			URL url = new URL("https://8oi9s0nnth.apigw.ntruss.com/corona19-masks/v1/stores/json?page=" + page);

			// 2번 스트림 연결
			HttpURLConnection con = (HttpURLConnection) url.openConnection();

			// 3번 버퍼 연결 (문자열)
			BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));

			// 4. 문자 더하기
			StringBuilder sb = new StringBuilder();

			String input = "";
			while ((input = br.readLine()) != null) {
				sb.append(input);
			}

			System.out.println(sb.toString());
			System.out.println();

			br.close(); // 버퍼 닫기
			con.disconnect(); // 스트림 닫기

			// 5. 자바 오브젝트로 변환
			Gson gson = new Gson();
			MaskInfo mask = gson.fromJson(sb.toString(), MaskInfo.class);

			return mask;
		} catch (Exception e) {
			e.printStackTrace();
		}

		return null;
	}

	public static void main(String[] args) {
		System.out.println("지역을 입력하세요");
		Scanner sc = new Scanner(System.in);
		String loc = sc.nextLine();

		List<StoreInfo> test = maskInfo(1).getStoreInfos();

		maskInfo(1).getStoreInfos().get(0).getAddr();

		ArrayList<MaskInfo> maskInfoList = new ArrayList<>();

		for (int i = 1; i < 1 + 1; i++) { // maskPage() 넣어야함
			MaskInfo mask = maskInfo(i);
			maskInfoList.add(mask);
		}

		for (MaskInfo maskInfo : maskInfoList) {
			for (int i = 0; i < maskInfo.getStoreInfos().size(); i++) {
				if (maskInfo.getStoreInfos().get(i).getAddr().contains(loc)) {
					System.out.println(maskInfo.getStoreInfos().get(i).getAddr());
					System.out.println(maskInfo.getStoreInfos().get(i).getName());
					System.out.println();
				}
			}
		}
	}
}

 

패키지명 : 패키지 이름을 적는다

클래스이름 : 클래스이름을 마음대로 적는다

나머지 사항도 원하는 것만 체크한다

공공데이터

1 . http
2. IP주소
3. port : 80
4. end point
5. 상세주소
6. 쿼리스트링

http://openapi.tago.go.kr/openapi/service/ = 엔드 포인트
DmstcFlightNvgInfoService/getAirmanList = 상세주소
?serviceKey 뒤에 모두 = 쿼리스트링

--------------------

DNS

범위가 있는 것을 도메인이라고 함 (영토 등)

---------------------

참고

https://www.crocus.co.kr/1553

 

Java에서 Collection이란?

Collection 이란? Collection 객체는 여러 원소들을 담을 수 있는 자료구조를 뜻한다 배열이 가장 기본적인 자료구조이며, DTO 또한 자료를 담는 하나의 방식이라고 볼 수 있다. 자바에서의 자료구조 유형은 다음..

www.crocus.co.kr

 

List -> 가변적 배열 -> 자식 ArrayList / LinkedList / Vector -> 랜덤엑세스 가능 -> Stack

Queue -> FIFO first in first out -> 대기열 만들때 -> 들어갈때 put 나올때 pop

Set -> 중복이 없는 데이터(로또 번호 같이) -> 자식 SortedSet 정렬기능

* Hash
암호화 기술.
어떤 문자열을 더짧은 길이의 값이나 키로 변환.
방대한 내용의 문장도 짧은 문자로 표현 가능.
자료의 진위 여부 판단.
Hash는 복호화가 되지 않는다  4 * 15 = 60 이지만 60 = 1 * 60 /  60 = 2 * 30 등 경우의 수가 많기 때문에.
Hash는 충돌할 수 있다(같은 문자열의 hash가 만들어 질 수 있다).

HashMap

-----------------------------

1급 객체 - 가장 바깥에 나올 수 있는 객체 (heap)

자바에서 1급 객체는  Object(클래스)다

자바스크립트에서는 변수나 메서드를 가장 바깥에 쓸 수 있으니까 모든 것이 1급 객체다

조인 - 

상관 서브 쿼리 - 주 쿼리부터 생각하고 서브쿼리를 이용한다

EXISTS - 조인과 비슷한 것이라고 생각하면서 사용 - 상관 서브 쿼리에서 주로 사용한다

 

'Database > OracleSQL' 카테고리의 다른 글

데이터 베이스 모델링  (0) 2020.04.24
자바 데이터베이스에서 자료 가져오기  (0) 2020.04.22
오라클 예제 및 문제  (0) 2020.04.08
200408  (0) 2020.04.08
오라클 서브쿼리 문제  (0) 2020.04.03

환경

윈도우10 64비트
오라클 18C

 

 

 

 

 

 

시스템에서 아래 파일 쿼리를 실행한다

F5를 누르면 워크시트에 있는 모든 쿼리가 실행된다

 

12c_script.txt
0.00MB

 

새로운 유저를 만든다 아이디 비번모두 c##madang

테스트 - 저장 - 접속

 

 

 

문제

-- 도서번호가 1인 도서의 이름
SELECT bookname
FROM BOOK
WHERE BOOKID = 1;

-- 가격이 20000원 이상인 도서의 이름
SELECT bookname
FROM BOOK
WHERE PRICE >= 20000;

-- 박지성의 총 구매액
SELECT SUM(SALEPRICE)
FROM ORDERS
WHERE CUSTID = 
(   
    SELECT CUSTID
    FROM customer
    WHERE name = '박지성'
);

-- 박지성의 총 구매액 다른방법
SELECT SUM(SALEPRICE)
FROM CUSTOMER, ORDERS
WHERE CUSTOMER.CUSTID = ORDERS.CUSTID AND NAME LIKE '박지성';


-- 박지성이 구매한 도서의 수
SELECT COUNT(ROWNUM)
FROM ORDERS
WHERE CUSTID = 
(   
    SELECT CUSTID
    FROM customer
    WHERE name = '박지성'
);

-- 박지성이 구매한 도서의 수 다른방법
SELECT COUNT(*)
FROM CUSTOMER, ORDERS
WHERE CUSTOMER.CUSTID = ORDERS.CUSTID AND CUSTOMER.NAME LIKE '박지성';


-- 도서의 총개수
SELECT COUNT(*)
FROM BOOK;


-- 출판사의 총개수
SELECT COUNT(DISTINCT publisher)
FROM BOOK;


-- 모든 고객의 이름 주소
SELECT NAME, ADDRESS
FROM customer;


-- 2014년 7월4일 ~ 7월7일 사이에 주문받은 도서의 주문번호
SELECT *
FROM ORDERS
WHERE ORDERDATE BETWEEN '14/07/04' AND '14/07/07';


-- 2014년 7월4일 ~ 7월7일 사이에 주문받은 도서를 제외한 도서의 주문번호
SELECT *
FROM ORDERS
WHERE ORDERDATE < '14/07/04' OR ORDERDATE > '14/07/07';


-- 성이 '김'씨인 고객의 이름과 주소
SELECT *
FROM customer
WHERE NAME LIKE '김%';


-- 성이 '김'씨이고 이름이 '아'로 끝나는 고객의 이름과 주소
SELECT *
FROM customer
WHERE NAME LIKE '김%아';

 

----------------------------

-- 박지성이 구매한 도서의 출판사 수
SELECT COUNT(DISTINCT b.publisher)
FROM (
    SELECT BOOKID
    FROM CUSTOMER C, ORDERS O
    WHERE c.custid = o.custid AND NAME = '박지성'
) A, BOOK B
WHERE a.bookid = b.bookid;


-- 박지성이 구매한 도서의 출판사 수 다른방법
SELECT COUNT(DISTINCT b.publisher)
FROM CUSTOMER C, ORDERS O, BOOK B
WHERE c.custid = O.CUSTID AND b.bookid = o.bookid AND NAME = '박지성';


-- 박지성이 구매한 도서의 이름, 가격, 정가와 판매가격의 차이
SELECT b.bookname, b.price, o.saleprice, (b.price - o.saleprice)
FROM BOOK B, customer C, ORDERS O
WHERE O.bookid = b.bookid AND o.custid = c.custid AND NAME = '박지성';


-- 박지성이 구매하지 않은 도서의 이름
SELECT DISTINCT BOOKNAME
FROM BOOK
WHERE BOOKID NOT IN (SELECT BOOKID
                    FROM customer C, ORDERS O
                    WHERE c.custid = O.CUSTID AND c.name = '박지성');


-- 박지성이 구매하지 않은 도서의 이름 다른방법1
SELECT DISTINCT BOOKNAME
FROM BOOK
WHERE NOT EXISTS (SELECT BOOKID
                    FROM customer C, ORDERS O
                    WHERE c.custid = O.CUSTID AND BOOK.BOOKID = O.BOOKID AND c.name = '박지성');


-- 박지성이 구매하지 않은 도서의 이름 다른방법2   
select bookname
from book
minus
select b.bookname 
from customer c , orders o , book b 
where c.custid = o.custid
    and o.bookid = b.bookid
    and name like '박지성';


-- 주문하지 않은 고객의 이름 (조인 사용)
SELECT NAME
FROM CUSTOMER
MINUS
SELECT DISTINCT NAME
FROM CUSTOMER C, ORDERS O, BOOK B
WHERE C.CUSTID = O.CUSTID AND B.BOOKID = O.BOOKID;


-- 주문하지 않은 고객의 이름 NOT IN
SELECT NAME
FROM CUSTOMER
WHERE CUSTID NOT IN (
                    SELECT CUSTID
                    FROM ORDERS
                    GROUP BY custid
                    );
                    
-- 주문하지 않은 고객의 이름 NOT EXISTS
SELECT NAME
FROM CUSTOMER
WHERE NOT EXISTS (
                SELECT CUSTID
                FROM ORDERS
                WHERE customer.custid = orders.custid
                );


-- 주문 금액의 총액과 주문의 평균 금액
SELECT SUM(SALEPRICE), AVG(SALEPRICE)
FROM ORDERS;


-- 고객의 이름과 고객별 구매액
SELECT C.NAME, SUM(o.saleprice)
FROM customer C, ORDERS O
WHERE C.CUSTID = O.CUSTID
GROUP BY C.NAME;


-- 고객의 이름과 고객이 구매한 도서 목록
SELECT c.name, b.bookname
FROM CUSTOMER C, ORDERS O, BOOK B
WHERE c.custid = o.custid AND B.BOOKID = O.BOOKID;


-- 도서의 가격(BOOK 테이블)과 판매가격(ORDERS 테이블)의 차이가 가장 많은 주문
SELECT *
FROM BOOK B, ORDERS O
WHERE b.bookid = o.BOOKid AND (B.PRICE - o.saleprice) = ( 
                                                        SELECT MAX(ABS(B.PRICE - o.saleprice))
                                                        FROM BOOK B, ORDERS O
                                                        WHERE b.bookid = o.BOOKid
                                                        );


-- 도서의 판매액 평균보다 자신의 구매액 평균이 더 높은 고객의 이름
SELECT C.NAME, AVG(o.saleprice)
FROM customer C, ORDERS O
WHERE c.custid = o.CUSTid
GROUP BY C.NAME
HAVING AVG(o.saleprice) > (
                            SELECT AVG(SALEPRICE)
                            FROM ORDERS
                            );

.

 

 

 

 

'Database > OracleSQL' 카테고리의 다른 글

자바 데이터베이스에서 자료 가져오기  (0) 2020.04.22
200409  (0) 2020.04.09
200408  (0) 2020.04.08
오라클 서브쿼리 문제  (0) 2020.04.03
200402 // SYNONYM, VIEW, CRUD, 인덱스 INDEX, , 클러스터링  (0) 2020.04.02

캐싱

---------------------------------

오라클은 한번 실행한 쿼리코드는 컴파일 하지 않는다(이미 컴파일 된 것으로 실행)

----------------------------------

인덱스
자바 db연동
웹 db 연동
데이터베이스 설계 - 포트폴리오

https://cafe.naver.com/busanit2018db

----------------------------------

DBMS = 계정(USER)

SYSTEM (ROOT)에서 "MADANG"

GRANT 

테이블생성

데이터입력

----------------------------------

넓은 의미의 스키마 - 인덱스 패키지 시퀀스 테이블 등 모든 것(오브젝트, 객체)들을 포함

아래 모든 것들은 객체(오브젝트,객체,resource)

GRANT CONNECT, RESOURCE TO c##madang; -- connect 연결 , resource 자원(객체, 오브젝트)

계정안에서 resource 권한을 쓰도록하는것 RESOURCE

 

conn c##madang/c##madang;

관리자 -> c##madang 으로 이동

------------------------------------------

DCL - control
DML - manipulation
DDL - define

------------------------------------------

------------------------------------------

 

오라클 자체 명령어

좁은 의미의 스키마 - 칼럼명(열이름)

------------------------------------

DISTINCT 는 SELECT에 한번만 적으면 모든 레코드(행)의 중복을 모두 없앤다

단항연산자 NOT 

문자열은  = 보다 LIKE를 사용하는게 관례

% 아무거나 여러개

'%김%' ->앞에 갯수상관없이 아무거나(0개도 가능) 중간에 김, 뒷쪽에 갯수상관없이 아무거나

'_김%' -> 첫글자 아무거나 두번째 김 나머지 아무거나

ORDER BY 는 성능을 많이 잡아먹는다(느리다) -> 인덱스를 이용해서 전처리해야함

AS "별칭" - 앨리어스

-------------------------------------

 

스칼라 서브쿼리

1. 드라이빙 테이블은 무조건 풀스캔
2. 드리븐 테이블이 PK가 아니면 스칼라 서브쿼리 사용금지
3. 드리븐 테이블의 내용이 커질 것으로 예상 된다면 안쓰는 것이 좋다
- LEFT OUTER JOIN으로 바꿔서 이용하는 것이 좋다

드리븐 테이블이 작으면 작을수록 성능이좋다

SELECT ID, TITLE, (SELECT COUNT(*) FROM REPLY WHERE BOARDID = B.ID) 
FROM BOARD B;

WHERE BOARDID = B.ID

BOARDID는 드라이빙 테이블 - 모두 읽는다(FULL SCAN)

B.ID는 드리븐 테이블 - 프라이머리 키이기 때문에 일치하면 검색멈춤

 

---------------------------------

프라이머리키 테이블에 하나씩

프라이머리키가 있는 테이블을 먼저 생성해야한다

외래키(참조) - 원본테이블에 있는 프라이머리키가 있어야만 갖고오는 것

---------------------------------

 

'Database > OracleSQL' 카테고리의 다른 글

200409  (0) 2020.04.09
오라클 예제 및 문제  (0) 2020.04.08
오라클 서브쿼리 문제  (0) 2020.04.03
200402 // SYNONYM, VIEW, CRUD, 인덱스 INDEX, , 클러스터링  (0) 2020.04.02
오라클 서브쿼리, IN, EXISTS 차이  (0) 2020.04.02

1. Auto activation triggers for java에 .뒤에 모든 영어를 붙인다

2. Disable insertion triggers except 'Enter' 를 체크한다(엔터 칠때만 자동완성)

+ Recent posts