Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- exception
- 오라클
- 인터페이스
- 다형성
- 컬렉션 타입
- 자바
- GRANT VIEW
- 컬렉션프레임워크
- 사용자예외클래스생성
- EnhancedFor
- NestedFor
- 객체 비교
- Java
- abstract
- cursor문
- 한국건설관리시스템
- 추상메서드
- 참조형변수
- 메소드오버로딩
- 집합_SET
- 제네릭
- 대덕인재개발원
- 어윈 사용법
- 자동차수리시스템
- 생성자오버로드
- 예외처리
- 정수형타입
- 환경설정
- 예외미루기
- oracle
Archives
- Today
- Total
거니의 velog
230802 자바 강의 본문
List, Set은 Collection 인터페이스를 상속받아서 구현.
Map은 따로 함.
HashMap, TreeMap, Properties...
여러 객체들이 Map을 상속받아 객체가 될 수 있는 클래스 중에 가장 많이 활용되는 것이 HashMap.
<K, V> 쌍으로 저장됨.
HashMap map = new HashMap(); 이렇게 생성하면 메모리 저장?
메모리 구조 상 호출 스택에서는 map이라는 공간이 하나 만들어지고, HashMap(); 객체가 힙에 만들어지는데, 이를 도해하면 key 영역이 있고 이에 대응하는 value 영역이 있다.
마치 2차원 배열처럼 구성됨. 오라클에 ERD를 보면 데이터를 저장하는 기본 구조가 이러한 테이블 구조이다. PK가 Key 영역, 나머지를 Value 영역으로 취급할 수 있다.
이 안에 데이터를 꺼내는 것이 문제. 맵에 데이터를 저장할 때에는 put() 메서드를 이용해 쌍으로 저장하고, 꺼낼 때는 여러 방법 사용. 그 중에 get() 메서드를 사용하여 키 값을 지정하면 그에 대응하는 밸류 값을 하나씩 꺼낼 수 있다.
[HashMapExample.java]
package ddit.chap13.map;
import java.util.HashMap;
import java.util.Map.Entry;
// 학번(정수), 이름(문자열) 자료를 저장하는 map
public class HashMapExample {
public static void main(String[] args) {
mapMethod01();
}
public static void mapMethod01() {
HashMap<Integer, String> map = new HashMap<Integer, String>();
// put(K,V); 자료 저장 메서드
map.put(1001, "홍길동");
map.put(1101, "정몽주");
map.put(2011, "이성계");
map.put(1903, "임현우");
// map 전체 자료 출력
System.out.println(map); // {1001=홍길동, 2011=이성계, 1101=정몽주, 1903=임현우}
// 저장 순서가 다른 이유? Hash. 자료구조에서 데이터를 비교하지 않고 저장할 수 있는 방법
// Hashing 시 사용되는 주소를 계산하기 위해 사용하는 함수를 Hashing Function.
// 다양한 방법이 존재. 이러한 이유는 같은 데이터가 다른 주소를 산출하지 않게 하기 위함.
// 홍길동이라면 늘 같은 주소를 만들고, 다른 데이터가 같은 주소를 만들면 안됨.
// 이 충돌들을 통해 데이터를 잃어버리게 됨. 이를 방지하기 위해 복잡한 알고리즘 소요.
// 해당 자료가 가진 개수적인 성질, 숫자로 변형하는 성질을 가지고 주소를 생성한다.
// 내가 입력한 순서와 실제 저장되는 순서는 전혀 관련성이 없다.
// kim을 저장하려면? k-11번째. 제곱 취하면 121. i-81, m-169 12181169. 12|1811|69 => | 를 기준으로 끝을 접는다(폴딩) => 1811 + 2196 = 4007이 주소.
// 계산되어진 주소에 의해 저장됨. 그 역할을 해주는 자바 메서드? Object 클래스의 hashcode();
System.out.println("==================================");
// get(key) : key값으로 value 추출.
System.out.println(map.get(2011)); // 이성계
System.out.println("==================================");
// Entry 객체를 이용하여 순차검색
System.out.println("학번 이름");
System.out.println("-----------");
for(Entry<Integer, String> entrySet : map.entrySet()) {
// System.out.println("key : " + entrySet.getKey() + ", value : " + entrySet.getValue());
System.out.println(entrySet.getKey() + " " + entrySet.getValue());
// if(entrySet.getKey() == 1101) { // 학번 비교하여 원하는 이름만 검색 가능.
// System.out.println("이름 : " + entrySet.getValue()); // 이름 : 정몽주
// }
}
System.out.println("==================================");
// map의 keySet()을 이용한 검색
// map.keySet(); // 반환 타입은 Set<Integer>. 모든 오브젝트 클래스를 반환하지 않고 Integer 클래스만 반환.
System.out.println("학번 -> 이름");
System.out.println("-------------");
for(Integer i : map.keySet()) {
System.out.println(i + " -> " + map.get(i));
}
}
}
-- 2020년 6월 제품별 판매집계(판매수량합계, 판매금액합계)
SELECT * FROM CART;
SELECT * FROM PROD;
SELECT * FROM CART WHERE CART_NO LIKE '202006%';
SELECT A.PROD_NAME 제품명
, SUM(B.CART_QTY) 판매수량
, SUM(A.PROD_PRICE * B.CART_QTY)판매금액
FROM PROD A, CART B
WHERE A.PROD_ID = B.CART_PROD
AND SUBSTR(B.CART_NO, 1, 6) = '202006'
GROUP BY A.PROD_NAME
ORDER BY A.PROD_NAME;
-- 판매가가 100만원 이상인 상품의 상품코드, 상품명, 판매가, 적정재고를 조회
SELECT * FROM PROD;
SELECT *
FROM (SELECT PROD_ID AS 상품코드
, PROD_NAME AS 상품명
, PROD_PRICE AS 판매가
, PROD_PROPERSTOCK AS 적정재고
FROM PROD
WHERE PROD_PRICE >= 1000000
ORDER BY PROD_PRICE DESC)
WHERE ROWNUM <= 3;
SELECT PROD_ID AS 상품코드
, PROD_NAME AS 상품명
, PROD_PRICE AS 판매가
, PROD_PROPERSTOCK AS 적정재고
FROM PROD
WHERE PROD_PRICE >= 1000000
ORDER BY PROD_PRICE DESC;
[DBTest.java]
package dbprogramming;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DBTest {
private String url = "jdbc:oracle:thin:@localhost:1521:xe";
private String user = "pc_21";
private String password = "java";
private Connection conn = null;
private Statement stmt = null; // 정적 쿼리
private PreparedStatement pstmt = null; // 동적 쿼리
private ResultSet rs = null;
private CallableStatement cs = null;// 프로시저 실행결과 반환
public void dbConnection() {
// 데이터베이스 연결 설정.
// jdbc:oracle:thin:@127.0.0.1:1521:xe
// 메인 DB 컴퓨터 ip address 열어서 방화벽 해제.
// ipconfig로 확인!
try {
conn = DriverManager.getConnection(url, user, password);
System.out.println("DB연결 성공");
// String sql = " SELECT PROD_ID, PROD_NAME, PROD_PRICE, PROD_PROPERSTOCK ";
// sql += " FROM PROD ";
// sql += " WHERE PROD_PRICE >= 1000000 ";
StringBuilder sb = new StringBuilder();
sb.append(" SELECT PROD_ID, PROD_NAME, PROD_PRICE, PROD_PROPERSTOCK ");
sb.append(" FROM PROD ");
sb.append(" WHERE PROD_PRICE >= 1000000 ");
sb.append(" ORDER BY PROD_PRICE DESC ");
String sql = sb.toString();
System.out.println(sql);
stmt = conn.createStatement();
// executeQuery : select 문만 사용.
// executeUpdate : update, insert, delete 문에 사용.
rs = stmt.executeQuery(sql); // 뷰를 보관하고 있는 객체
while(rs.next()) {
String pid = rs.getString("PROD_ID");
String pname = rs.getString("PROD_NAME");
StringBuilder ss = new StringBuilder(pname);
for(int i=pname.length(); i<20; i++) {
ss.append("\0");
}
String name = ss.toString();
int price = rs.getInt("PROD_PRICE");
int pstock = rs.getInt("PROD_PROPERSTOCK");
System.out.printf("%-12s %-20s %10d %5d\n", pid, name, price, pstock);
}
}catch(SQLException e) {
e.printStackTrace();
}finally {
if(rs != null) try {rs.close();} catch(Exception e) {}
if(stmt != null) try {stmt.close();} catch(Exception e) {}
if(pstmt != null) try {pstmt.close();} catch(Exception e) {}
if(conn != null) try {conn.close();} catch(Exception e) {}
}
}
public void selectList(String sql) {
}
}
[DBTestExample.java]
package dbprogramming;
public class DBTestExample {
public static void main(String[] args) {
DBTest dt = new DBTest();
dt.dbConnection();
}
}
'대덕인재개발원 > 대덕인재개발원_Java' 카테고리의 다른 글
230803 자바 강의 (0) | 2023.08.03 |
---|---|
230801 자바 강의 (0) | 2023.08.01 |
230731 자바 강의 (0) | 2023.07.31 |
230729 자바 과제 _ 클래스 다이어그램 구현 (0) | 2023.07.29 |
230728 자바 강의 (0) | 2023.07.29 |