728x90

 기본 환경: IDE: Eclipse, Language: Java

 

 

발생 Exception

Java에서 다음 Source Code를 실행할 경우,

import java.util.*;
import java.text.*;

public class Today {

	public static void main(String[] args) {
		SimpleDateFormat sdf2 = new SimpleDateFormat("yyyyMMddHHmmss"); // java.text
		Date birth = sdf2.parse("20230213184030"); // java.util, String -> Date 형변환
		System.out.println("Birth: " + sdf2.format(birth));
		
	}
	
}

⭐ java.lang.Error: Unresolved compilation problem:

→ Unhandled exception type ParseException 발생

 

 

Exception 원인

문자열을 기반으로 객체를 만드는데 파싱*에서 에러가 발생할 경우, ParseException이 발생

*파싱(Parsing): 구문 분석, 주어진 정보를 내가 원하는 형태로 가공하는 것

Source Code상의 문제는 없으나, Compile Error가 발생할 수 있기때문에 Exception에 대한 처리 필요

 

 

해결 방법

1. Add throws declaration

import java.util.*;
import java.text.*;

public class Today {

	public static void main(String[] args) throws ParseException {
		SimpleDateFormat sdf2 = new SimpleDateFormat("yyyyMMddHHmmss"); // java.text
		Date birth = sdf2.parse("20230213184030"); // java.util, String -> Date 형변환
		System.out.println("Birth: " + sdf2.format(birth));
		
	}
	
}

 

2. Surround with try/catch

import java.util.*;
import java.text.*;

public class Today {

	public static void main(String[] args) {
		Date date = new Date();
		System.out.println("오늘 날짜: " + date);
		
		SimpleDateFormat sdf = new SimpleDateFormat("y년 MM월 dd일 E요일 HH:mm:ss");
		System.out.println("오늘 날짜: " + sdf.format(date));
		
		SimpleDateFormat sdf2 = new SimpleDateFormat("yyyyMMddHHmmss"); // java.text

		Date birth=null;
		try {
			birth = sdf2.parse("20230213184030");
		} catch (ParseException e) {
			e.printStackTrace();
		} // java.util, String -> Date 형변환
		System.out.println("Birth: " + sdf2.format(birth));
	}
	
}

 

 

 

참고 자료

📑 Live Study 9주차 - 예외 처리

📑 [JAVA] Parsing이란 무엇인가?

 

728x90
728x90

기본 환경: IDE: Eclipse, Language: Java

 

발생 Warning

Java에서 다음 Source Code를 실행할 경우,

package basic;

import java.util.*;

public class AvoidLeakage {

	public static void main(String[] args) {
		Scanner scan2 = new Scanner(System.in);
		System.out.println("Enter the String2: ");
		String s2 = scan2.next();
	}

}

Resource leak: 'scan2' is never closed

→ Warning  발생

 

 

Warning 원인

입력 시, 키보드 외에도 파일 등을 통해 입력을 받는 경우도 있음
(파일작업 순서: 파일 열기 → 파일 사용 → 파일 닫기)
⭐ 파일을 열어놓고 닫지 않을 경우, 파일이 손상될 수가 있으므로 파일 작업은 열고 닫는 과정을 명시적으로 입력해야 함
 스캐너 생성 시 파라미터로 값을 넘기게 되는데(new Scanner(System.in), in: 키보드 입력), 키보드 입력의 경우 close()를 해주지 않아도 상관 없지만 리소스를 사용하는 경우에는 되도록 close()해주는 습관을 들이는 것이 좋음

 

 

해결 방법

Scanner class type variable scan에 대한 close() 추가

package basic;

import java.util.*;

public class AvoidLeakage {

	public static void main(String[] args) {
		Scanner scan2 = new Scanner(System.in);
		System.out.println("Enter the String2: ");
		String s2 = scan2.next();
		
		scan2.close();
	}
}

⚠️ System.in으로 키보드를 통한 입력받을 대상이 남아있음에도 불구하고 close()할 경우 ,

package basic;

import java.util.*;

public class AvoidLeakage {

	public static void main(String[] args) {
		Scanner scan2 = new Scanner(System.in);
		System.out.println("Enter the String2: ");
		String s2 = scan2.next();
		
		scan2.close();
		
		String s3 = scan2.next();
	}
}

java.lang.IllegalStateException: Scanner closed 발생 → ⭐ 입력을 모두 마친 후, scan.close() 작성

 

 

 

➕ Scanner class 객체 생성을 main() 내부가 아닌 class에 직접 생성할 경우, Resource Leakage 발생 X

package basic;

import java.util.*;

class AvoidLeakage2{
	Scanner scan = new Scanner(System.in);

	public void printS() {
		System.out.println("Enter the String: ");
		String s = scan.next();
	}
}

 

참고 자료

📑 자바 sc.close();

 

 

728x90

'Java > Java with Error' 카테고리의 다른 글

[해결 방법] java.lang.Error  (0) 2023.02.16
[해결 방법] java.lang.Error  (0) 2023.02.13
[해결 방법] java.lang.Error  (0) 2023.02.12
[해결 방법] java.lang.Error  (0) 2023.02.11
[해결 방법] java.lang.NullPointerException  (0) 2023.02.11
728x90

이 글은 뉴렉쳐 오라클 데이터베이스 SQL 강의 수강하며 정리한 글입니다.

 

 

05강 - 수업용 사용자와 데이터베이스 생성하기

 

Oracle DB 계정(기본)
1. 관리자 계정(Admin Accounts)
: SYS: DB 백업, DB 스케쥴링 등 DB 전체 기능 조정(SYSDBA 권한을 갖고 있음)
: SYSTEM: 일반적인 DB 관리자 역할
2. 쿼리 연습용 샘플 DB와 사용자 계정

 

DataBase
: Data를 여러 파일로 나눠서 갖고 있으며, 이러한 파일들에 담긴 Data를 ⭐Table(표, Entity, 개체) 형태로 관리
⚠️ 하나의 테이블에 하나의 파일을 담는 것이 아니라 여러 파일이 담김

⭐ 예시
: 학생 Data를 DBMS에 요청할 경우, DBMS가 DB 내 파일에 있는 Data를 table에 담아 보여줌
→ 이러한 Table이 모여 있는 공간을 table space라고 함
Table Space(Schema): table, idx, Obj 등으로 이뤄져 있음

 

Table Space, Schema를 만들어서 사용자를 추가하여 DB를 사용하게 하고자 함
1. PDB 선택 → 보기 → DBA

 

2. 왼쪽 하단부 DBA: 접속 → 초록색 플러스 버튼 → PDB 선택 후 확인

 

3. DB 생성을 위한 저장 영역 → 테이블 스페이스 → 오른쪽 마우스 → 새로 만들기

 

4. 임시 DB 저장소 추가 생성
⚠️ 속성 변경 확인: 예(Y)
⚠️ 임시 DB를 생성하지 않을 경우, transition이 멈출 수 있으므로 생성 시에도 파일 크기를 무조건 적게 만들면 안됨

 

5. Table Space를 운용할 수 있는 계정 생성
6. 왼쪽 하단부 → DBA → 보안 → 사용자 → 새로 만들기
⚠️ 사용자 이름: 대문자(소문자로 할 경우, “”로 감싸서 로그인 해야 함) → 대소문자가 구분 됨
cf. 사용자 이름: HJ, 새 비밀번호: ****

 

➕ 시스템 권한: 모두 관리자 선택 후 하기 내용(일반 유저가 갖을 수 없는 권한) 체크 해제 후 적용
⚠️ 체크 해제: SYSKM, SYSOPER, SYSRAC

 

새로 생성한 계정으로 DB에 접속하기
1. 왼쪽 상단부 접속: 초록색 플러스 버튼
2. 새로운 계정 테스트 → 접속

 

 

소스 코드

🔗 HJ0216/TIL/OracleSQL

728x90
728x90

 기본 환경: IDE: Eclipse, Language: Java

 

발생 Error

Java에서 다음 Source Code를 실행할 경우,

else {
	int index = input.indexOf(repOld);
	int count=0;

	while(index > -1) {
		count++;
		index = input.indexOf(repOld, index + repNew.length());
	} // while: find String
			
	if(index!=-1) {
		String inputNew = input.replace(repOld, repNew);
	} System.out.println(inputNew);
}

inputNew cannot be resolved to a variable

→ java.lang.Error: Unresolved compilation problem 발생

 

 

Error 원인

String inputNew를 if-else 구문 내 선언하여 지역변수화 됨

else 구문 밖 println문에서는 해당 변수를 사용할 수 없음

 

 

해결 방법

else 구문 밖에서 String inputNew 선언 후, else 구문 안에서 값 계산

else {
	int index = input.indexOf(repOld);
	int count=0;
        String inputNew=""; // Initialization

	while(index > -1) {
		count++;
		index = input.indexOf(repOld, index + repNew.length());
	} // while: find String
			
	if(input.indexOf(repOld)!=-1) {
		inputNew = input.replace(repOld, repNew);
	} System.out.println(inputNew);
}

 

 

 

728x90
728x90

이 글은 뉴렉쳐 오라클 데이터베이스 SQL 강의 수강하며 정리한 글입니다.

 

04강 - 오라클 PDB 서버에 접속하기

1. CDB: Conatiner DB
: 여러개의 PDB를 담을 수 있는 DB

* CDB root Container
: CDB는 하나의 루트 컨테이너를 가지며, CDB 생성 시 루트 컨테이너 자동 생성
: CDB 자체에 대한 시스템 정보와 멀티 테넌트의 핵심이 되는 모든 PDB에 필요한 메타 데이터 저장

 

 

2. PDB
: local user 입장에서는 독립적 DB로 보이는 CDB(Container DB)에서 자유롭게 탈부착이 가능한(Pluggable) DB
: PDB 끼리는 서로 독립적이므로 서로 데이터를 공유하지 못함

 

 

* PDB 접속 전 PDB 존재 확인

1. SQL Plus 실행 또는 consol(cmd)에서 sqlplus sys as sysdba
2. 비밀번호 입력
3. SQL> 에서 select name from v$pdbs; 실행

PDB$SEED: 원본
XEPDB1: 실제 PDB(가상 DB)

 

* SQL Developer를 활용한 PDB server 접속

DB의 메인이 되는 CDB를 직접 다루는 것이 위험할 수 있으므로 가상DB인 PDB를 이용

 

 DB 원격 접속을 위한 설정 변경
EXEC DBMS_XDB.SETLISTENERLOCALACCESS(FALSE) 활용

1. cmd: sqlplus sys as sysdba
2. 비밀번호 입력
3. SQL> select name from v$pdbs; 실행
4. SQL> EXEC DBMS_XDB.SETLISTENERLOCALACCESS(FALSE);

5. SQL Developer
6. 호스트 이름: Local DB가 설치되어있는 PC에서 cmd: ipconfig -> IPv4 주소 붙여넣기
7. 테스트 후 접속

⚠️ 포트: 1521가 방화벽 설정에서 닫혀있으면 Local DB에 원격으로 접속하기 위해서 따로 설정이 필요함

 

 

 

참고 자료

📑 Oracle - Mutitenant, PDB, CDB 란?

📑 오라클 멀티테넌트 DB 기본개념 정리 (Oracle Multi-Tenant DB Basics)

 

소스 코드

🔗 HJ0216/TIL/OracleSQL

728x90