SELECT empno,ename,job FROM emp;
--"emp" 테이블에서 "empno," "ename," "job" 열을 선택
CREATE TABLE book1( -- "book1" 이름의 데이터베이스 테이블 생성
b_no NUMBER(5) CONSTRAINTS book1_pk PRIMARY KEY,
b_title VARCHAR2(30) NOT NULL,
b_author VARCHAR2(30) NOT NULL,
b_price NUMBER(7) DEFAULT 0
);
INSERT INTO book1(b_no, b_title, b_author, b_price)
VALUES(1, '자바의정석', '남궁성', 30000);
--"book1" 테이블에 데이터 삽입
--"b_no," "b_title," "b_author," "b_price" 열에 값을 삽입
INSERT INTO book1(b_no,b_title,b_author,b_price)
VALUES(2, '오라클','나신입',20000);
--"book1" 테이블에 또 다른 데이터 삽입
INSERT INTO book1(b_no,b_title,b_author,b_price)
VALUES(3, 'html5','나초보',50000);
--"book1" 테이블에 또 다른 데이터 삽입
SELECT b_no, b_title, b_author, b_price FROM book1;
--"book1" 테이블에서 "b_no," "b_title," "b_author," "b_price" 열을 선택
--"book1" 테이블의 데이터를 가져옴
1. 가변형 타입(Variable-Length Data Type)
2. 고정형 타입(Fixed-Length Data Type)
SELECT LENGTH('hello') FROM dual;
실제 id값이 hello로 동일하더라도 char타입의 경우 white space가 5자리가 더 있으므로 두 아이디 값은 다르다로 판정되므로 에러발생임
commit;
package jdbc.oracle;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Vector;
public class List1 {
public static void main(String[] args) {
// 인터페이스와 추상클래스는 단독으로 인스턴스화 불가
// List는 인터페이스이므로 직접 인스턴스화할 수 없음
// List li2 = new List();
// Map 객체를 생성하고 "map" 변수에 할당
Map<String, Object> map = new HashMap<>();
// Map 객체 출력 {}
System.out.println(map);
// List 인터페이스를 구현한 ArrayList 객체를 생성하고 "li" 변수에 할당
//li.size()=0 - 다형성
List li = new ArrayList();
// ArrayList 객체 출력 []
System.out.println(li);
// ArrayList 크기 출력 (초기 크기:0)
System.out.println(li.size());
// "li" 리스트에 "map" 추가
li.add(map);
// "li" 리스트 크기 출력 (크기:1)
System.out.println(li.size());
// "map"에 키-값 쌍을 추가
map.put("b_no",1);
map.put("b_title", "자바의 정석");
System.out.println("==============================");
// "li"가 List 타입인지 확인하고 결과 출력
System.out.println(li instanceof List);
// "li"가 ArrayList 타입인지 확인하고 결과 출력
System.out.println(li instanceof ArrayList); //
System.out.println("==============================");
// "map"의 내용 출력
// {b_no=1, b_title=자바의 정석}
System.out.println(map);
// "map"에서 "b_author" 키의 값을 가져와서 출력 (null)
System.out.println(map.get("b_author"));
// "map"에서 "b_price" 키의 값을 가져와서 출력 (null)
System.out.println(map.get("b_price"));
// "map"에서 "b_price"의 값을 가져와서 정수로 캐스팅하고 "b_price" 변수에 할당
// VO와 Map을 제네릭으로 선택했을 때의 차이점이라는 걸 인지해야 함
int b_price = (int)map.get("b_price");
// "map"에서 "b_author"의 값을 가져와서 정수로 캐스팅하고 "b_price" 변수에 다시 할당
b_price = (int)map.get("b_author");
// "b_price" 변수의 값을 출력 (NullPointerException)
System.out.println(b_price);
// "li" 변수를 Vector 객체로 다시 할당
li = new Vector();
// "li" 변수를 LinkedList 객체로 다시 할당
li = new LinkedList();
// List 인터페이스를 구현한 ArrayList 객체를 생성하고 "li2" 변수에 할당
List<Map<String, Object>> li2 = new ArrayList<>();
}
}
package jdbc.oracle;
public class BookVO {
// 책 번호를 나타내는 변수
private int b_no = 0;
// 책 제목을 나타내는 변수
private String b_title = "";
// 책 저자를 나타내는 변수
private String b_author = null;
// 책 가격을 나타내는 변수
private int b_price = 0;
// 책 번호(getter)
public int getB_no() {
return b_no;
}
// 책 번호(setter)
public void setB_no(int b_no) {
this.b_no = b_no;
}
// 책 제목(getter)
public String getB_title() {
return b_title;
}
// 책 제목(setter)
public void setB_title(String b_title) {
this.b_title = b_title;
}
// 책 저자(getter)
public String getB_author() {
return b_author;
}
// 책 저자(setter)
public void setB_author(String b_author) {
this.b_author = b_author;
}
// 책 가격(getter)
public int getB_price() {
return b_price;
}
// 책 가격(setter)
public void setB_price(int b_price) {
this.b_price = b_price;
}
}
package jdbc.oracle;
import java.util.List;
import java.util.Map;
public class List2 {
void methodA(List<BookVO> bookList) {
// 사용권 - 나신입 - 로그인 - 권한
// BookVO 객체 생성
//b_no,b_title,b_author,b_price-private - thread가 관리함 List<ChatServerThread>
BookVO bVO = new BookVO();
// bVO.b_title="수학의 정석";
// BookVO 객체의 제목과 저자 설정
bVO.setB_title("수학의 정석");
bVO.setB_author(null);
System.out.println(bVO.getB_title()); // "수학의 정석"
System.out.println(bVO.getB_author()); // null
// BookVO 객체의 저자가 null이므로 저자의 길이를 구하면 NullPointerException이 발생
~~System.out.println(bVO.getB_author().length()); ~~
// 빈 문자열의 길이는 0
System.out.println("".length());
// BookVO 객체를 새로 생성
bVO = new BookVO(); //LifeCycle - 생성 - 호출 - 죽임(메모리 회수 - 캔디데이트 - gc)
// BookVO 객체의 제목 출력
// 새로운 객체이므로 초기값인 빈 문자열
System.out.println(bVO.getB_title());
}
void methodB(List<Map<String,Object>> bookList) {
}
public static void main(String[] args) {
List2 list2 = new List2();
list2.methodA(null); // 파라미터를 사용하지 않았기 때문에 에러가 나지 않는다
}
}
<예제3-1>
package jdbc.oracle;
/*
* List의 제네릭 타입으로 VO를 선택할 것인가? 아니면 Map을 선택하는 것이 맞는걸까?
* 기준이 뭐야?
* 관찰 - 생각, 고민
* BookVO - 타입이 정해져 있다. - 값(원시형과참조형)을 담는다
*
* Map<String,Object> - 키(VO에서 변수명이고 ,오라클 컬럼명) 와 값( 추상적이다. - Object - 결정이 안됨, 미정, 다된다)
* 문제제기
* 서로 다른 키가 참조하는 값으로 연산을 해야 한다면??? 어떤 점을 고려해야 하나요? -> 타입이 문제 되지 않는걸까???
*
*/
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class List3 {
void methodA(List<BookVO> bookList) {
// 사용권 - 나신입 - 로그인 - 권한
//bookList.size()=0
System.out.println(bookList);
BookVO rbVO = bookList.get(0);
System.out.println((Integer)rbVO.getB_price() instanceof Integer);
System.out.println("10"+10);//1010 -> 20
//CastingException, NumberFormatException,....
System.out.println(rbVO.getB_price()*5);
}
void methodB(List<Map<String,Object>> bookList) {
//bookList.size()=0
System.out.println(bookList);
Map<String,Object> rmap = bookList.get(0);
System.out.println(rmap.get("b_price") instanceof Integer);
System.out.println(rmap.get("b_price") instanceof String);
System.out.println(rmap.get("b_price") instanceof Object);
// System.out.println(rmap.get("b_price")*5);
}
public static void main(String[] args) {
List3 list2 = new List3();
List<BookVO> bookList = new ArrayList<>();
BookVO bVO = new BookVO();//b_no, b_title, b_author, b_price - private - thread가 관리함 List<ChatServerThread>
//bVO.getB_no()0 bVO.getB_title()"" bVO.getB_author()null bVO.getB_price()0
bVO.setB_no(1);
bVO.setB_title("자바의정석");
bVO.setB_author("남궁성");
bVO.setB_price(30000);
//뭐가 담겼지? BookVO주소번지가 하나 담겼다. BookVO 안에는 변수가 4개 선언되어 있다.
//4개중에서 2개는 int 2개 는 String - 관찰하기
bookList.add(bVO);//bookList.size()=1 - 뭐가 하나지?
List<Map<String,Object>> bookMap = new ArrayList<>();
//bookMap.add(bVO);//제네릭 타입이 달라서 컴파일 에러 발생함
Map<String,Object> map = new HashMap<>();
map.put("b_no", 1);
map.put("b_title","자바의정석");
map.put("b_author", "남궁성");
map.put("b_price",30000);
bookMap.add(map);//빈깡통이다.
list2.methodA(bookList);
list2.methodB(bookMap);
}
}
<예제3-2>
package jdbc.oracle;
//반드시 테이블에 설계된 컬럼만 선언할 수 있는 건 아니야
//화면과는 상관이 없지만 업무 프로세스를 처리하기위해서 추가로 필요한 변수도 선언하세요 - 보이지 않는 부분 - 찾아서 변수를 선언할 수 있다. - 멘토
//개발자는 글쓰기에 대한 습관
public class BookVO {
private int b_no = 0;//
private String b_title ="";//
private String b_author =null;//
private int b_price = 0;//
//int count = 5;//도서 주문량
//페이징 처리 - 페이지네비게이션
//int start = 0;
//int end = 0;
//int pagePerList = 10;
//int totalRecord = 45;
public int getB_no() {
return b_no;
}
public void setB_no(int b_no) {
this.b_no = b_no;
}
public String getB_title() {
return b_title;
}
public void setB_title(String b_title) {
this.b_title = b_title;
}
public String getB_author() {
return b_author;
}
public void setB_author(String b_author) {
this.b_author = b_author;
}
public int getB_price() {
return b_price;
}
public void setB_price(int b_price) {
this.b_price = b_price;
}
}