728x90

대용량 처리 자료형 : LOB
대용량 문자처리 자료형 : CLOB

  • char의 C + LOB

 

clob의 필요성

varchar2는 최대 4000byte이기 때문에 4000byte가 넘는 고용량들을 다룰 때, clob이 필요

 


문제점

CLOB을 그냥 쓰면 자바 객체 출력 때처럼 객체주소가 찍혀 나오는 것처럼 출력됨

 

해결책

DBMS_LOB.SUBSTR() 사용

 

DBMS_LOB.SUBSTR()

DBMS_LOB.SUBSTR(CLOB컬럼명, 자를 문자 수, 시작위치offset) 

 

주의사항

1)TO_CLOB()으로 감싸기

TO_CLOB(클롭컬럼명)으로 감싸지 않으면, 식별자가 너무 길다는 오류 발생 가능성

TO_CLOB(CONTENT)

2)길이 한도

CLOB 자체는 4000넘어도 되지만 DBMS_LOB.SUBSTR()을 쓰면 4000까지만 가능
따라서, 4000이 넘는 CLOB데이터를 조회할 때는 이어 붙여야함
||이나 concat() 사용
ex) 1-4000 + 4001-8000 식으로 문자열 이어 붙이는 방법

DBMS_LOB.SUBSTR(col1, 4000, 1) || DBMS_LOB.SUBSTR(col1, 4000, 4001) AS CONTENTS 
SELECT 
    TITLE, 
    WRTIER,
    DBMS_LOB.SUBSTR(col1, 4000, 1) || DBMS_LOB.SUBSTR(col1, 4000, 4001) AS CONTENTS
FROM BOARD

 

 

관련 함수

DBMS_LOB.INSTR(CLOB컬럼명, '검색할 단어', 몇번째 위치한 단어)  // 찾으려는 문자열의 인덱스번호 반환
DBMS_LOB.GETLENGTH(CLOB컬럼명)                         // 해당 컬럼의 길이 반환

1)DBMS_LOB.INSTR()

지정한 문자열이 나올 때마다 해당 인덱스 번호 반환
LIKE보다 조회 빠름

2)DBMS_LOB.GETLENGTH()

해당 컬럼의 전체 길이 반환(공백 포함)

 

 

참고자료
https://developyo.tistory.com/364
https://joongwoonc.tistory.com/52

728x90
반응형
728x90

 

 

제어문(control flow statement)

프로그램의 수행 흐름을 바꾸는 역할

1.조건문

2.반복문

3.분기문

 

 

1.조건문

조건에 따라 다른 문장이 수행되도록 해줌

1)if

2)switch

 

if문을 주로 쓰고,

switch문은 처리해야 하는 경우의 수가 많을 때는 switch문이 유리

 

1)if문

if (조건식) {  // 조건식은 논리값(true/false)
		수행문장;
}

--> 조건식의 결과가 true면 안에 있는 문장 실행
if(조건식) {
		수행문장;
} else {
		수행문장;
}
--> 조건식의 결과가 true면, 안에 있는 문장 실행
--> 조건식의 결과가 false면, else 안에 있는 문장 실행

if else문은 조건이 2가지 일 때만 사용

3가지 이상이면 if, else if, else를 사용

 

else if

if(조건식) {
		수행문장;
} else if(조건식) {
		수행문장;
} else {
		수행문장;
}

if문은 처음에 반드시 와야함

else if는 여러 개일 수 있음

else문은 없을 수 있음

 

if문 하나에서 순차적으로 false되면 다음 조건으로 넘어가다가 true가 되면 이후 조건은 수행x

  -  if문끼리는 true라도 연속 동작함

ex)

if(month == 1 || month == 2 || month == 12) {
		season = "겨울";
		if(temperature <= -15) {
				season += "한파 경보";
		} else if(temperature <= -12) {
				season += "한파 주의보";
		}
} else if (month >= 3 && month <=5) {
				season = "봄";
} else if (month >= 6 && month <=8) {
			  season = "여름";
				if(temperature >= 35) {
						season += "폭염 경보";
				} else if(temperature >= 33) {
									season += "폭염 주의보";
				}
} else if(month >= 9 && month <= 11) {
				season = "가을";
} else { 
				season = "해당하는 계절이 없습니다.";
}

 

 

2)switch

형태

switch (조건식) {
case 값1 :
case 값2 :
case 값3 : 
default : 
}

조건식 : 정수, 문자, 문자열

조건식 정수,문자,문자열만 들어갈 수 있으므로, case의 값도 정수, 문자, 문자열 중에서 들어갈 수 있으며 해당 값이 일치하면 콜론(:)의 오른쪽 실제 실행되는 코드를 입력하면 된다

switch() ()안에 변수 값과 일치한 case 값을 true/false 논리로 해서 true되면 해당 case 안에 코드가 실행됨

어디에도 해당되지 않는 때 처리하는 것이 default ( = else)

 

if문과 switch문 차이

if문은 true가 되면 해당 조건의 코드 발동하고,

switch는 true된 코드부터 아래까지 전부 실행

if는 true가 되면 해당 코드만 실행하고 빠짐

switch는 각 case 안에 break 코드를 넣어줌

 

중첩 여부

switch끼리 중첩 가능

if switch 둘이 섞어서도 둘을 중첩해서도 모두 가능

 

예시 코드

(switch문은 주로 주문 메뉴에서 자주 쓰임)

public void method4() {
		
		// 메뉴 자판기
		// 번호지정하면 실행되는 로직
		Scanner sc = new Scanner(System.in);
		System.out.println("===메뉴===");
		System.out.println("1.간단 계산기");
		System.out.println("2.짝/홀수 판단");
		System.out.println("3.n월의 마지막 날");
		System.out.print("메뉴 번호 : ");
		int menuNum = sc. nextInt();
		
		switch(menuNum) {
		case 1:
			System.out.println("간단 계산기입니다");
			break;
		case 2:
			System.out.println("짝홀수 판단입니다.");
			break;
		case 3:
			System.out.println("n월의 마지막 날입니다.");
		// 1-3외의 다른 수가 입력된다면?
		// 아무런 반응x -> default로 해결
		default:
			System.out.println("잘못된 메뉴 번호입니다");
		}
	}

 

 

728x90
반응형
728x90

 

StringBuffer & StringBuilder 클래스는

불변 클래스인 String 클래스랑 다르게 문자열 수정이 가능한 가변 클래스다

 

String이 수정이 불가능하다니 무슨 말일까?

String 타입의 변수에 값을 넣어보면 언제든 바꿀 수 있는걸 알 것이다. 근데 사실 이게 데이터 자체가 수정되는게 아니라 시스템 내부에서는 String 타입의 변수에 값이 들어오면 메모리에 새로운 공간과 주소값을 생성시키고 기존의 것을 삭제하고 대체하는 식으로 작동한다. 그럼 주소값도 달라지고 눈에 보이는건 수정된 걸로 보이지만 말이다. 근데 이 둘 StringBuffer & StringBuilder은 말그대로 데이터 자체를 수정시킨다. 주소값 변함없이.

 

String 클래스와 이 둘의 차이

 - String : 변경이 적고 읽기만 많은 경우에 유리. 수정불가.

 - StringBuffer & StringBuilder : 문자열에 대한 수정이 많이 일어나는 경우 유리. 수정가능.

 

StringBuffer & StringBuilder의 차이는?

StringBuffer 동기화 o / 상대적으로느림 / 안전

StringBuilder 동기화 x / 빠름

둘이 동기화처리 빼고는 기능이 모두같다

동기화가 들어가면 상대적으로 안전하다. 데이터에 대해 락을 걸어놓고 진행하기에 처리속도가 상대적으로 느릴 수 있고 동기화가 안들어가면 락이 없어 그마만큼 속도가 다소 빠르다.

 

StringBuffer & StringBuilder

메모리 관리를 위해 에전에는 String대신 쓰기도 했다고 하나 요새는 성능들도 많이 좋아지고 String을 대개 많이쓴다고한다. 퍼나빌더를 쓴다고 눈에띄게 빨라지는게 아니라고 한다. 또한 자동으로 수용량(capacity)가 증가한다.

 

 

StringBuffer 안에 쓸 수 있는 많이 쓰는 메소드들

1) append()

받아온 값을 뒤에 추가로 이어주는 메소드

 

2) insert()

원하는 자리에 값 추가 시킬 수 있는 메소드

 

3) delete()

데이터 삭제하는 메소드

delete(int start, int end) : StringBuffer

deleteCharAt(int index) : StringBuffer

 

4)reverse()

앞뒤 거꾸로 값을 바꿔놓는 메소드

 

728x90
반응형
728x90

 

 

 

JAVA1 6.1. 데이터와 연산

 

데이터의 종류(type) 있고 이와 연산이 관련있다

자바에서 어떤 데이터 타입들이 있고 각각 데이터들마다 어떤 연산 방법들이 존재하는지 알아보자

 

 

 

JAVA1 6.2. 데이터 타입

프로젝트 생성

sysout하고 ctrl+space하면 출력코드를 풀로 자동채워준다

System.out.println();

 

숫자 number

문자 String

"" 묶으면 숫자도 문자로 바뀜

ex) System.out.println("6"); // 데이터타입이 str 6

 

System.out.println("1111".length()); // 문자열의 길이를 알려주는 .length()

 

프로그램에서는 데이터별로 타입이 있고 그에 정해진 연산법이 있어서 구분을 해야한다

 

실력을 쌓고 스킬을 올린다는 것은 크게 두가지의 흐름을 갖는다

1.내가 지금 다루는 시스템에는 어떤 종류의 데이터타입이 존재하는가를 알아가는

2.각각의 데이터 타입별로 어떤 연산 방법들이 존재하는가

 

둘을 통해 폭발적인 퍼포먼스가 발생

 

 

 

 

JAVA1 6.3. 숫자와 연산

클래스 생성 : 우클릭 new-class

 

사칙연산 : + =+- * / 이들을 연산자(operator)라고 부름

 

System.out.println(Math.); 에서 Math.까지 쓰면 이클립스에서는 Math.에서 있는 여러가지 연산방법들을 보여주니 적극 활용할

 

Math.PI : 3.14 blahblah

Math.floor() : () 값을 내림하는 메소드

Math.ceil() :   () 값을 올림하는 메소드

ex) System.out.println(Math.ceil(a));

 

 

 

JAVA1 6.4. 문자열의 표현

큰따옴표와 작은 따옴표의 차이를 알아둘 필요가 있다

다른 언어에서는 '' 감싸던 "" 감싸던 호환이 되지만 자바에서는 에러

'작은 따옴표 Character 나타내며 한글자만

" 따옴표 String 나타내며, 복수의 글자. 한글자도 가능

 

 

줄바꿈하기 : 문자열 사이에 \n 넣기

  - \n : newline이라는 의미

" 출력하고 싶을 경우 \ 붙이기

 ex) hello "world" 출력하고 싶다면

        System.out.println("hello \"world\"");

 

 

이스케이프코드(escape) : \

 

 

 

JAVA1 6.5. 문자열 다루기

.length() : 문자열 개수 세기

.replace( , ) : 문자 바꾸기

 

System.out.println("Hello World".length());  // 결과값 11

System.out.println("Hello, leezhe leezhe leezhe bye".replace("leezche", "egoing"));

System.out.println("Hello, [[[name]]] bye".replace("[[[name]]]", "Mr")); // 대량 이메일 보낼 있음

 

 

 

 

 

 

JAVA1 7. 작심삼일 공학

 

선생님인 이고잉님이 공부를 어떻게 생각하고 수업을 어떻게 만들었는지 전략 소개

1)학생일 전략

낯선 분야를 공부할 작심삼일이 오면, 순간을 '나는 의지가 박약해'라고 생각하지 않고 대신 '공부를 그만하라는 뇌의 명령이다'라고 생각하고 과감하게 진도를 나가지 않고 지금까지 배운 것과 삶의 문제의 접점을 찾기 위해 노력함. 배운 것만으로 여러가지로 쓸모 있다고 뇌에게 증명하기 위해 여기저기 뛰어다님

뇌의 흥분도가 점점 고조되고 다시 공부하라는 명령이 떨어짐. 뇌를 이기는 장사는 없다

 

 

2)선생님일 때의 전략

중도하차하면 아무 것도 없는 무능함에 빠지고, 완주하면 무엇부터 해야될지 모르는 무기력함에 빠진다. 요새 강의를 만들 때는 참여자가 뇌의 명령으로 공부를 그만두어도 지금까지 배운 것만으로도 자신의 문제를 해결할 있는 수업을 만들기 위해 노력. 또한 다시 공부하라는 명령이 뇌에서 떨어지면 다시 공부를 시작할 있도록 노력함

우리가 배우는 수업자체는 하나하나가 그것 자체로 쓸모 있는 수업. 언제든지 공부는 그만하고 일을하고 언제든지 일을 그만하고 공부를 해라.

 

 

728x90
반응형
728x90

 

스위칭 하듯이 바뀌면 좋겠지만 일련의 절차를 거쳐 a,b 값이 바껴야한다

a,b값을 서로 교환할려면 일단 한쪽 값이 한쪽에 들어가야하는데 그럼 한쪽 값이 지워지니

지워지기 전에 임시 변수에 넣어두기로 하자

 

x,y,z 변수를 각각 생성하고 x값에 y값을 넣어서 x값이 지워지기 전에

z변수에다가 x값을 넣어서 저장하고 넣으면 된다

 

위의 결과처럼 x=1,y=2 였지만

x=2, y=1로 잘 교환이 됨

 

근데 문자열+정수는 a5가 나와야하는데 102가 나왔네...? 뭐지

변수값이나 변수명 등 바꿔봤는데 100넘는 값이 어디서 오는 것인가...

자바는 일단 한번 선언된 변수는 계속 유효하다고 들었는데 이것 때문인지 뭔지

피곤하니 일단 자고 내일 다시 해보는걸루

728x90
반응형
728x90

8.문자와 문자열

 

하나의 문자는 홑따옴표로 감싸줘야함. 캐릭터 타입의 변수에 저장할 있음

  • 홑따옴표 안에 두개 이상의 문자를 넣을 경우 에러

 

char ch = 'A';

char ch = 'AB';  // error

 

 

String s = "ABC";

  • 문자가 연속적으로 이어져 있는 것을, 문자열 or 문자열 리터럴이라고 부름
  • 문자열을 저장하려면 변수타입이 String이어야함
  • String 원래 자바에서 제공하는 class. 문자열을 다룰 사용
  • 문자열 class 워낙 자주 쓰이기에,  얘만 기본형 변수에 값을 저장하는 것과 같은 표현을 허용함

 

 

 

※ 문자열 출력별 차이

String s1 = "AB";

String s2 = new String("AB");

  • 위의 문장의 거의 같고 보통 위에 문장 사용
  • 차이는 9장에서

String s = "A";  // 문자 하나. ok

String s = "";   // 문자열. ok

char ch = '';    // 문자열. error

 

String s1 = "A" + "B"  // 결과값 "AB" : 문자열 하나로 결합하라는

  • "" + 7 "" + "7"   "7" : (숫자를 문자열로 캐스팅한 )
  • 문자열은 문자열하고만 결합이 가능해서 숫자7 문자열로 바꾸고 결합한
  • 숫자에 문자열을 결합하면 문자열 숫자가 되는
  • 연산 진행 순서는

ex) ""+7+7 "7"+7 "7"+"7" "77"

ex) 7+7+"" 14+"" "14"+"" "14"

 

문자열 + any type 문자열

any type + 문자열 문자열

 

728x90
반응형

+ Recent posts